servo
SG90 Micro Servo。3根线,红色VCC,棕色GND,橙色为控制线。规格中说,工作电压为4.8V,信号线输入50Hz(20ms)PWM,duty cycle确定角度(位置):
- 1ms(5%) - -90度
- 1.5ms(7.5%) - 0度
- 2ms(10%) - 90度
不知道该怎么连接到STM32,STM32输出电平为3.3V。拍脑袋地给它供电5V,信号线接I/O脚,按规格要求输入50Hz PWM。结论是:能工作,但与规格所给的duty cycle相去甚远。后详。
用蓝色药丸,内部时钟频率72MHz:
- 选择PSC=143,得72MHz/(1+143) = 500KHz
- 选择ARR=9999,得 500KHz/(1+9999) = 50Hz。按照5%~10% duty cycle范围,有10000*5% = 500个取值,即精度达到1/500,角度为180/500=.36度
若根据规格中给出的duty cycle,则CCR范围应为:
- 1ms(-90度):10000*(1/20) = 500
- 2ms(90度):10000*(2/20) = 1000
但实际情况为:
- CCR=240时,电机位置大约在-90度。此时 duty cycle = 2.4% = .48ms
- CCR=1190时,电机位置大约在90度。此时duty cycle= 11.9% = 2.38ms
- CCR取上下限值的中间值时,电机位置和0度有一定偏差
- 电机差异性明显、较大。不同的电机,CCR上、下限值不同(不同的电机,发出的声音也各不相同。。。)
因此,对每一个电机,使用前都应该进行标定,例如,确定出-90、-45、0、45、90度等几个位置的CCR,中间角度的CCR则用线性插值算出。改天试试。
尝试过用板子上变压输出的3.3V给电机供电,发现驱动力不足。有的电机会卡死,有的虽然可以空载转动,但是电机声音明显痛苦、濒临卡死。但是:用3.3V或5V供电,电机的位置是一样的,即:电机位置取决于duty cycle(CCR),与工作电压无关。如果用5V MCU(例如Arduino),所需的CCR是否会与规格符合呢?改天试试。