主题中讨论的其他器件: MSP430G2553
工具与软件:
您好、 我最终尝试以低频、7.8或14Hz 的频率驱动 PZT 芯片、但我无法让它播放任何频率的波形。 您能否检查我的代码以验证我是否正确地对标头和数据进行了编程? 此外、如果我希望待机位在发出"GO"位后始终变为1、
下面是我的代码和响应。
import smbus
import time
drv2667_adrrs = [0x59]
# I2C write
def i2c_write(slave_adress :int, reg_adress :int, data :int):
    i2c.write_byte_data(slave_adress, reg_adress, data)
    time.sleep(.01)
    check = i2c.read_byte_data(slave_adress, reg_adress)
    print("written to "+ str(slave_adress) +", register"+str(reg_adress)+ "="  + hex(check))
    return
    
# I2C read
def i2c_read(slave_adress :int, reg_adress):
    data = i2c.read_byte_data(slave_adress, reg_adress)
    print("Device: "+ str(slave_adress) +", register"+str(reg_adress)+ "="  + str(data))
    return
    
def drv2667_setup(slave_adress):
    # Control
    i2c_write(slave_adress, 0x02, 0x00) # Exit STNBY mode
    #i2c_write(slave_adress, 0x01, 0x3D) # DRV2667, Analog Mode, Gain: Vpp=100V
    i2c_write(slave_adress, 0x01, 0x3B) # DRV2667, Digital Mode, Gain: Vpp=100V
    #i2c_write(slave_adress, 0x02, 0x02) # EN_OVERRIDE=1
    
    i2c_write(slave_adress, 0x03, 0x01) # Waveform ID# 0x01 to start waveform
    i2c_write(slave_adress, 0x04, 0x00) # Terminate Waveform by clearing this register 0x03
    
    print("DRV2667 @" + str(slave_adress) + "is ready on Digital Amplifier Mode, Vout=50V when Vdd=3.6V")
    
    return
    
def drv2667_waveform(slave_adress):
    #Following the Example in 8.3.2.1 Single Click Alert Example  (Modified)
    
    #Set to memory page 1
    i2c_write(slave_adress, 0xFF, 0x01)
    #Header
    i2c_write(slave_adress, 0x00, 0x05)  #Header Size
    i2c_write(slave_adress, 0x01, 0x80)  #Start address upper Byte, Mode 3
    i2c_write(slave_adress, 0x02, 0x06)  #Start address lower byte
    i2c_write(slave_adress, 0x03, 0x00)  #Stop address Upper Byte
    i2c_write(slave_adress, 0x04, 0x09)  #Stop address lower byte
    i2c_write(slave_adress, 0x05, 0x01)  #Repeat waveform count, once
    #Data
    i2c_write(slave_adress, 0x06, 0xFF)  #Amplitude, Full scale
    i2c_write(slave_adress, 0x07, 0xFF)  # Frequency  
    i2c_write(slave_adress, 0x08, 0xFF)  #Cycles
    i2c_write(slave_adress, 0x09, 0x00) # Envelope, no envelope
    
    #Set Page Register back to Control Space
    i2c_write(slave_adress, 0xFF, 0x00)
    
    
    print("DRV2667 @" + str(slave_adress) + "is ready to Trigger GO for waveform play")
    
    return
    
if __name__ == "__main__":
    # I2C Setting
    i2c = smbus.SMBus(1)
    # DRV2667のAnalog Mode Setup
    for addr in drv2667_adrrs:
        drv2667_setup(addr)
        drv2667_waveform(addr)
    time.sleep(1)
    
    # Check STANDBY bit
    print("DRV2667 STATUS STANDBY")
    i2c_read(addr, 0x02)
    i2c_write(addr, 0x02, 0x01) # GO
    
    data2 = i2c.read_i2c_block_data(addr, 0x02, 1)
    print ("GO:" ,hex(data2[0]))
这是我从上述代码返回的响应。
written to 89, register2=0x0 written to 89, register1=0x3b written to 89, register3=0x1 written to 89, register4=0x0 DRV2667 @89is ready on Digital Amplifier Mode, Vout=50V when Vdd=3.6V written to 89, register255=0x1 written to 89, register0=0x5 written to 89, register1=0x80 written to 89, register2=0x6 written to 89, register3=0x0 written to 89, register4=0x9 written to 89, register5=0x1 written to 89, register6=0xff written to 89, register7=0xff written to 89, register8=0xff written to 89, register9=0x0 written to 89, register255=0x0 DRV2667 @89is ready to Trigger GO for waveform play DRV2667 STATUS STANDBY Device: 89, register2=0 written to 89, register2=0x40 GO: 0x40
在任何频率、振幅或周期下、DRV2667的输出端都没有响应。 我不确定我是否正确构建了波形接头和数据。
如有任何帮助、将不胜感激。
谢谢!
David
 
				 
		 
					 
				


















