- 打卡等级:以坛为家II
- 打卡总天数:419
- 最近打卡:2025-05-02 06:28:49
中级会员
- 积分
- 452
|
在研学移植梁工控制无刷电动机代码时,发现梁工初始化设置PWM时,PWMA_CCER1 |= 0x05;OC1正负通道都打开了,换向时PWM1_L = 1;(即PWM1负通道同一引脚);PWM1负通道输出低电平时是否因为设置io为高阻状态,避免了短路?
void PWMA_config(void)
{
P_SW2 |= 0x80; //SFR enable
P2M1 &= ~(0x3f), P2M0 |= (0x3f);
PWMA_PSCR = 3; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
PWMA_DTR = 24; // 死区时间配置, n=0~127: DTR= n T, 0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
// 0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T, 0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
PWMA_ARR = 255; // 自动重装载寄存器, 控制PWM周期
PWMA_CCER1 = 0;
PWMA_CCER2 = 0;
PWMA_SR1 = 0;
PWMA_SR2 = 0;
PWMA_ENO = 0;
PWMA_PS = 0;
PWMA_IER = 0;
// PWMA_ISR_En = 0;
PWMA_CCMR1 = 0x68; // 通道模式配置, PWM模式1, 预装载允许
PWMA_CCR1 = 100; // 比较值, 控制占空比(高电平时钟数)
PWMA_CCER1 |= 0x05; // 开启比较输出, 高电平有效
PWMA_PS |= 1; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
.......
void StepMotor(void) // 换相序列函数
{
switch(step)
{
case 0: // AB PWM1, PWM2_L=1
PWMA_ENO = 0x00; PWM1_L=0; PWM3_L=0;
Delay_500ns();
PWMA_ENO = 0x01; // 打开A相的高端PWM
PWM2_L = 1; // 打开B相的低端
ADC_CONTR = 0x80+6; // 选择P1.6作为ADC输入 即C相电压
CMPCR1 = 0x8c + 0x10; //比较器下降沿中断
break;
.......
case 3: // BA PWM2, PWM1_L=1
PWMA_ENO = 0x04; PWM2_L=0; PWM3_L=0; // 打开B相的高端PWM
Delay_500ns();
PWM1_L = 1; // 打开C相的低端
ADC_CONTR = 0x80+10; // 选择P0.2作为ADC输入 即C相电压
CMPCR1 = 0x8c + 0x20; //比较器上升沿中断
break;
.......
|
|