【沁恒RISC-V内核 CH582】定时器PWM 驱动舵机
[复制链接]
【沁恒RISC-V内核 CH582】CH582 用固态继电器控制取暖器发热管可行性 https://bbs.eeworld.com.cn/thread-1197474-1-1.html
我的评测作品,最后是DIY一个手机APP控制电取暖器。主要思路是改装我家的一个电取暖器,原来的取暖器是发热源是电热丝,电热加热后用风机吹出热空气,类似电吹风机的原理。现在改装的思路是用固态继电器替代手工加热开关档位,用舵机来控制风机电位器。
前面已经用APP可以控制开关,现在准备用APP控制舵机来控制风机的电位器:
一、在原来的APP下面增加3个按键,分别为控制舵机转到指定角度,并在微信小程序上增加发送指领的相关函数。
二、我所用的舵机为N年前买的舵机:ES06MA,好象最大转角只有180。
1、查看资料舵机的旋转角度是由一个20ms(50Hz)周期的pwm波形来控制电机旋转角度来决定旋转多少度。要想得到50HzPWM就要用到定时器PWM。
2、翻看例程\CH583EVT\EVT\EXAM\TMR,我决定用TMR3来做:
#if 1 /* 定时器3,PWM输出 */
GPIOB_ResetBits(GPIO_Pin_22); // 配置PWM口 PB22
GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_20mA);
TMR3_PWMInit(High_Level, PWM_Times_1);
TMR3_PWMCycleCfg(1200000); // 周期 50Hz 20ms 具体为:60 000 000 /1 200 000 = 50
TMR3_Disable();
TMR3_PWMActDataWidth(600000); // 占空比 50%, 修改占空比必须暂时关闭定时器
TMR3_Enable();
#endif
配置好后用示波器测量PB22,得到50Hz的波形:
改写simpleProfileChangeCB接收回调函数
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
{
switch(paramID)
{
case SIMPLEPROFILE_CHAR1:
{
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
tmos_memcpy(newValue, pValue, len);
PRINT("profile ChangeCB CHAR1.. %s\n",newValue);
if(pValue[0] == '0')
{
GPIOB_SetBits(GPIO_Pin_19);
}
else if (pValue[0] == '1') {
GPIOB_ResetBits(GPIO_Pin_19);
}
else if (pValue[0] == 'a') //97 'a'
{
TMR3_Disable();
TMR3_PWMActDataWidth(32000); // 0度 0.5ms
TMR3_Enable();
}
else if (pValue[0] == 'b') {
TMR3_Disable();
TMR3_PWMActDataWidth(96000);// 1.5ms = 60,000 *1.5
TMR3_Enable();
}
else if (pValue[0] == 'c'){
TMR3_Disable();
TMR3_PWMActDataWidth(128000); // 180 2ms 120*1000
TMR3_Enable();
}
break;
}
下载程序后就可以控制舵机的转动了。
到此为止,基本取暖器分块都调试差不多了,下一步组装测评。
|