大家好,欢迎来到IT知识分享网。
实现1khz占空比为50%方波的按键可调移相。(和普遍意义上的移相器差很多)。
思路:采用定时器捕获模式,采集到上升沿或下降沿后延时,用DAC输出正或零电压。
在做的过程中,程序编译没问题,但仿真出现奇怪的问题。比如:
初始化函数仿真出现死循环,但单步执行进去又可以执行。
按键函数,DAC初始化函数,定时器初始化函数初始化顺序不同,出现的问题也不同。
问了同学后发现是中断速度太快,无法跑进主程序里。在主函数的语句前后分别失能使能中断即可解决。
和中断密切相关的执行语句,放到中断里执行比较好。
最后代码如下:
中断函数:
使用定时器2通道1的捕获模式
//定时器2中断服务程序
void TIM2_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); //清除中断标志位
if(i==1)
{
DelayUs(detime);
DAC_SetChannel1Data(DAC_Align_12b_R, 4000);//??DAC?
i=0;
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);
}
else if(i==0)
{
DelayUs(detime);
DAC_SetChannel1Data(DAC_Align_12b_R, 0);//??DAC?
i=1;
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising);
}
}
主函数while(1)中的函数:
key_v=CH452_GetKey();
if(key_v==0x58)
{
if(detime<470)
detime+=27;
else
detime=1;
key_v=0;
phase=((float)(detime))/1000*360;
sprintf(buffer,”phase:%f”,phase);
OLED_ShowStr(0,3,buffer,1);//测试6*8字符
}
else if(key_v==0x59)
{
if(detime>=27)
detime-=27;
else
detime=1;
key_v=0;
phase=((float)(detime))/1000*360;
sprintf(buffer,”phase:%f”,phase);
OLED_ShowStr(0,3,buffer,1);//测试6*8字符
}
else{
detime=detime;
key_v=0;
phase=((float)(detime))/1000*360;
sprintf(buffer,”phase:%f”,phase);
OLED_ShowStr(0,3,buffer,1);//测试6*8字符
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
其中获取按键函数修改为:
uint8_t CH452_GetKey(void)
{
int key=0;
TIM_ClearITPendingBit(TIM2, ~TIM_IT_CC1);
if(CH452_DOUT_GET())return 0xFF;
CH452_Command(CH452_CMD_GETKEY,0,4);
//
if(CH452_DOUT_GET())key|=0x40;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x20;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x10;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x08;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x04;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x02;
CH452_DCLK_CLR();
CH452_DCLK_SET();
if(CH452_DOUT_GET())key|=0x01;
CH452_DCLK_CLR();
CH452_DCLK_SET();
//
if(key&0x40)return key&0xFF;
else return 0xFF;
}
2019.7.22.9.22
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11823.html