梁工
发表于 2023-5-22 22:31:37
dong97512 发表于 2023-5-22 18:58
梁工,你好!目前我输入工控0-10伏,单片机AD口是0-4伏,设置0伏为0档, 4伏为54档,转动电位器采样:电 ...
是否将ADC输入端设置为高阻了?必须设置为高阻。
电位器调到0,应该是0V,如果没有到0V(或非常接近0V),则是电位器的问题,因为ADC是输入,电压由电位器提供。
梁工
发表于 2023-5-22 22:34:42
社区闲人 发表于 2023-5-22 10:35
再请教一下,捕获脉冲宽度的例程中PWMB_SMCR = 0x54;
为什么bit7位为0?
哪里的例子?我的例子没有操作SMCR寄存器:
void PWMB_config(void)
{
P_SW2 |= 0x80; //SFR enable
PWMB_CCER1= 0;
PWMB_CCER2= 0;
PWMB_SR1 = 0;
PWMB_SR2 = 0;
PWMB_ENO = 0; //IO禁止输出PWM,bit6: ENO8P, bit4: ENO7P,bit2: ENO5P,bit0: ENO4P
PWMB_PS = 0;
PWMB_IER = 0;
PWMB_ISR_En = 0;
PWMB_PSCR = 11; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
PWMB_CCMR1 = 0x01; // CC1配置为输入模式, 且映射到TI1FP1上
PWMB_CCER1|= 0x01; // 配置捕获极性为CC1的上升沿, 使能捕获, 0x01:上升沿, 0x03:下降沿
PWMB_CCMR2 = 0x02; // CC2配置为输入模式, 且映射到TI1FP2上
PWMB_CCER1|= 0x30; // 配置捕获极性为CC2的下降沿, 使能捕获, 0x10:上升沿, 0x30:下降沿
PWMB_PS |= 0; // 选择IO, 0:选择P2.0, 1:选择P1.7, 2:选择P0.0, 3:选择P7.4,
PWMB_ISR_En |= 0x02; // 使能CC1中断
PWMB_ISR_En |= 0x04; // 使能CC2中断
P2n_standard(Pin0); // P2.0设置为准双向口
P20 = 1;
PWMB_CCMR3 = 0x01; // CC3配置为输入模式, 且映射到TI3FP3上
PWMB_CCER2|= 0x01; // 配置捕获极性为CC3的上升沿, 使能捕获, 0x01:上升沿, 0x03:下降沿
PWMB_CCMR4 = 0x02; // CC2配置为输入模式, 且映射到TI3FP4上
PWMB_CCER2|= 0x30; // 配置捕获极性为CC4的下降沿, 使能捕获, 0x10:上升沿, 0x30:下降沿
PWMB_PS |= (0<<4); // 选择IO, 0:选择P2.2, 1:选择P3.3, 2:选择P0.2, 3:选择P7.6,
PWMB_ISR_En |= 0x08; // 使能CC3中断
PWMB_ISR_En |= 0x10; // 使能CC4中断
P2n_standard(Pin2); // P2.2设置为准双向口
P22 = 1;
PWMB_IER= PWMB_ISR_En; //设置标志允许通道1~4中断处理
PWMB_CR1 |= 0x01; // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
}
dong97512
发表于 2023-5-23 22:25:32
梁工 发表于 2023-5-22 22:31
是否将ADC输入端设置为高阻了?必须设置为高阻。
电位器调到0,应该是0V,如果没有到0V(或非常接近0V) ...
仔细查看过,AD, 输入引脚都设为高输入状态,具体为何状态电位器快到2端位置(估计是1档或者53档,万用表测试电压推断)会出现停顿问题还没有找错原因。想再请教一下,这个电机转动圈数可以如何计算,我可以再输入0或者10伏档时,状态电位器在1档或者53档位的时候, 强行再给它工作几圈,就能到位了,这个圈数能计数就可行了。是吧?谢谢梁工了!就差一步了,这个项目应该就算完成了。
梁工
发表于 2023-5-24 11:12:37
dong97512 发表于 2023-5-23 22:25
仔细查看过,AD, 输入引脚都设为高输入状态,具体为何状态电位器快到2端位置(估计是1档或者53档,万用表 ...
从霍尔信号中可以知道转速信号,换相次数就可以知道转了多少角度。
你可以断开电位器,用电流表测量ADC输入对GND和对Vref的电流,这个电流小于1uA就设置对了(通常会小于0.1A)。
dong97512
发表于 2023-5-25 10:44:46
dong97512 发表于 2023-5-23 22:25
仔细查看过,AD, 输入引脚都设为高输入状态,具体为何状态电位器快到2端位置(估计是1档或者53档,万用表 ...
电位器位置修正值就正常了,理论计算偏差。还想请教一下,电机运作圈数, 应该好计数吧,通过霍尔3个检测脚都运作一次,加一圈,,这样合理吗?非常感谢!
fisholive
发表于 2023-5-26 16:19:14
梁工,
刚启动后,第一次进入ADC中断,要累计8次才可以求平均值,开始前7次,次数不够,算下来平均时间会不会乱?
PhaseTimeTmp = PhaseTime; //保存一次换相时间
if(++TimeIndex >= 8) TimeIndex = 0; //累加8次
for(PhaseTime=0, i=0; i<8; i++) PhaseTime += PhaseTimeTmp; //求8次换相时间累加和
PhaseTime = PhaseTime >> 4; // >>4 = 值/16 ,求8次换相时间的平均值的一半, 即30度电角度
梁工
发表于 2023-5-26 21:48:25
fisholive 发表于 2023-5-26 16:19
梁工,
刚启动后,第一次进入ADC中断,要累计8次才可以求平均值,开始前7次,次数不够,算下来平均时间会不 ...
不会乱的,开始给有初值,并且开始低速,电流不大,有点误差影响不大,并且8次切换那是瞬间就可以完成的,大部分电机切换8次都还没转半圈呢。
我2015年的版本是没有30度角处理的(使用STC15W408AS),只是效率没那么高,力矩稍小。
dong97512
发表于 2023-5-29 13:01:53
梁工,我手上一款电机样品,正转电流正常,反转电流越转越大,不正常的大,电机公司提供的测试板是专业电机驱动板,正反转确实正常,这种现象如何理解,电机公司还是认可自己的产品没问题。
梁工
发表于 2023-5-29 14:01:44
dong97512 发表于 2023-5-29 13:01
梁工,我手上一款电机样品,正转电流正常,反转电流越转越大,不正常的大,电机公司提供的测试板是专业电机 ...
换相时序不对,双踪示波器(最好是四踪)看一下波形。
dong97512
发表于 2023-6-10 23:10:20
梁工 发表于 2023-5-29 14:01
换相时序不对,双踪示波器(最好是四踪)看一下波形。
梁工,你好!我手上有个电机,原来的方案,霍尔数组 {0, 1, 3, 2, 5, 6, 4}, //CWW
{0, 4, 6, 5, 2, 3, 1}//CW,运转正常。 在目前这个案例的switch(step)里面顺时钟方向 填入132564 ,逆时针填入 231465;或者顺时钟方向 填入132564 ,逆时针填入 465231 , 霍尔和相线怎样配相 都不正常工作,我该如何填入这个顺序才对?谢谢!
页:
1
2
[3]
4
5
6
7
8
9
10
11
12