- 打卡等级:以坛为家II
- 打卡总天数:477
- 最近打卡:2025-06-30 08:12:00
中级会员
- 积分
- 396
|
发表于 2024-8-10 22:55:21
|
显示全部楼层
请大佬详解一下红线这一句,不理解哦。电位器调到中间不动,程序开始运行时adc11 =0,进入主循环后,adc11 是不是一直增加?
void main(void)
{
WTST = 0; //CPU读取程序存储器的等待时间控制等于0即不等待。
CKCON = 0; //外部数据总线时钟控制寄存器(上电复位值为7,强烈建议上电初始化为0)
EAXFR = 1; //访问XFR区域的扩展SFR,需要先将EAXFR(PSW2.7)置1,
P_LED = 0; //LED指示灯亮
P2n_standard(0x08); //LED\P2M1 &= ~(0x08), P2M0 &= ~(0x08)
P3n_standard(0x0f); //串口,P3.2 P3.3,本例未用
P5n_standard(0x0c); //P5.2 P5.3用于测试指示
adc11 = 0;
PWMA_config();
PWMB_config();
ADC_config();
Timer0_config(); //Timer0初始化函数
PWW_Set = 0;
EA = 1; // 打开总中断
while (1)
{
if(B_4ms) // 4ms时隙
{
B_4ms = 0;
adc11 = (adc11 *3)/4 + Get_ADC12bitResult(11); //低通滤波结果为14位
YouMen = adc11 >> 5; //油门是9位的, P0.3 ADC11-->控制电位器输入
if(YouMen >= 256) PWW_Set = YouMen - 256, B_direct = 0; //顺时针, PWM设置值0~255
else PWW_Set = 255 - YouMen, B_direct = 1; //逆时针, PWM设置值0~255
if(!B_RUN && (PWW_Set >= 30)) // PWM_Set >= 30, 并且电机未运行, 则启动电机
{
P_LED = 0; //LED指示灯亮
PWM_Value = 30; //启动电机的最低PWM, 根据具体电机而定
PWMA_CCR1L = PWM_Value; //输出PWM
PWMA_CCR2L = PWM_Value;
PWMA_CCR3L = PWM_Value;
B_RUN = 1; //标注运行
StepMotor(); //启动换相
}
if(B_RUN) //正在运行中
{
P_LED = 0; //LED指示灯亮
if(PWM_Value < PWW_Set) PWM_Value++; //油门跟随电位器, 调速柔和
if(PWM_Value > PWW_Set) PWM_Value--;
if(PWM_Value < 20) // 停转
{
B_RUN = 0;
PWMB_IER = 0;
PWMB_CCER1 = 0;
PWMB_CCER2 = 0;
PWM_Value = 0;
PWMA_ENO = 0;
PWMA_CCR1L = 0;
PWMA_CCR2L = 0;
PWMA_CCR3L = 0;
PWM1_L=0;
PWM2_L=0;
PWM3_L=0;
}
else
{
PWMA_CCR1L = PWM_Value;
PWMA_CCR2L = PWM_Value;
PWMA_CCR3L = PWM_Value;
}
}
else
{
if(++cnt500ms == 125) //500ms
{
cnt500ms = 0;
P_LED = ~P_LED; //LED指示灯闪烁, 待机
}
}
}
}
} |
|