AS3933低频唤醒帧格式如下图1所示:
现在小弟准备利用已经调好的pwm波形,输出特定的曼彻斯特编码帧格式进行对as3933芯片的低频唤醒。
图2是需要实现的帧格式。
我目前的实现方法是:
曼彻斯特编码的1,即1->0,
0,即0->1.
要想实现图2的帧格式,我是想利用pwm的开关来实现从1->0,0->1的跳变。代码如下所示。
void STM32_PWM_ENABLE()
{
TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_Cmd(TIM1, ENABLE);
}
void STM32_PWM_DISABLE()
{
TIM_CtrlPWMOutputs(TIM1, DISABLE);
TIM_Cmd(TIM1, DISABLE);
}
void manchester_one()
{
STM32_PWM_ENABLE();
Delay(1);
STM32_PWM_DISABLE();
Delay(1);
}
void manchester_zero()
{
STM32_PWM_DISABLE();
Delay(1); //Ñóê±1ms
STM32_PWM_ENABLE();
Delay(1);
STM32_PWM_DISABLE();//1Øμôpwm2¨DÎêä3ö
}
void carrier_burst()
{
STM32_PWM_ENABLE();
Delay(1);
STM32_PWM_DISABLE();
Delay(1);
}
void qin_pwm()
{
uint16_t i = 0;
/*¼ù¶¨ò»¸öÂü31Ë1ìØÂëÔa3¤¶èÎa360us*/
/*2åèëÔØ2¨DÅoÅ3ms*/
carrier_burst();
#if 1
/*Ç°μ¼
reamble 0xFF*/
for(i = 0; i < 8;i++)
{
manchester_one();
}
/*Ä£ê½pattern 0x96*/
manchester_one();
manchester_zero();
manchester_zero();
manchester_one();
manchester_zero();
manchester_one();
manchester_one();
manchester_zero();
/* SOF */
for(i = 0; i < 7;i++)
{
manchester_one();
}
manchester_zero();
/* ID */
for(i = 0; i < 8;i++)
{
manchester_one();
}
/* CRC16 */
for(i = 0; i < 8;i++)
{
manchester_one();
}
#endif
/* EOF 0xaa*/
for(i = 0; i < 4;i++)
{
manchester_one();
manchester_zero();
}
delay_ms(500);
}
软件模拟的波形如下图图三所示。
困惑点:
1、AS3933的一个码元的长度,比如说是125K低频信号的多少个周期?
2、这样子的程序设计思路是否存在问题?如果有问题该怎么去调整?
3、用示波器去看这个波形的话不稳定一直在跑(while(1)里面每隔一段时间发送图三这样的波形,但是示波器看的话这个波形一直在移动),是什么原因?
4、AS3933芯片论坛里大大有资料的帮忙共享下,着急死了
用过MCP2030,和AS3933类似
一周热门 更多>