MB1504的程序实践与调试
MB1504的程序实践与调试
此文章主要是mb1504的软件调试,极少涉及硬件的组成,如果想看1504的硬件搭建建议忽略本文章。主要是我对1504调试的一些方法与经验的总结,建立在大致了解1504的基础上。不过为了照顾小白(其实在写这篇文章2个月以前我也是小白),我将大致介绍一下mb1504以及锁相环(pll)。有基础知识的朋友可跳过。本人实力有限,希望大家多多指正。
全部程序与相关资料下载
(码云):https://gitee.com/casual_new_programmer/my-chip-program-warehouse/tree/mb1504/
(开源电子网):http://47.111.11.73/forum.php?mod=viewthread&tid=326667
锁相环与mb1504简介
锁相环:
锁相环 (PLL)是一种利用相位同步产生的电压,去调谐压控振荡器以产生目标频率的负反馈控制系统(引自百度百科)。如果你需要一个频率可调且上兆的正弦波(一般是),这时候你就需要PLL电路。其工作原理网上轻松可以查到。简单点说就是一个压控震荡器(VCO)根据输入的电压产生一个固定频率的信号(一般是正相关的,但是也有负相关)。然后一个负反馈电路对输出的信号进行相位检测(看看频率与预期是否相符),再对VCO的输入信号进行调控,使其输出为预期值。1504就可以作为负反馈控制。
MB1504:
看到这篇文章的朋友对负反馈肯定都是了解的,在此不再赘述。1504可以根据VCO产生的频率来自动调节VCO的输入电压。具体实现电路在此也不赘述。其具体的原理与使用方法也将在下问详细叙述。1504的电路在锁相环里面的功能如下图所示。
吐槽
为什么我的吐槽要放在这里?因为第一次做锁相环遇到了太多坑了。如果不出效果,那就是没效果。一点中间变化都没有,根本不知道哪错。所以说,大家在调试的时候一定要沉住气,说不定你离成功就差一步。
在一个月之前硬件就大体完成,我作为我们组的程序员开始调试之路。在这一个月中我查找了大量资料,做了大量尝试,并且让硬件员做了多次修改后终于调出了效果。
在最开始的时候,网上直接找到了代码,并且是别人能用的。但是我仿照其写的程序在我们硬件上毫无反应。作为一个小白,我们不清楚是什么原因(程序上明显的逻辑错误已经排除了)。于是我在网上查找,竟然没有人发过一篇有关调试的文章!!!这也是我写这篇文章的原因。于是我只好自己去无数遍的看别人的程序,看别人写的资料,甚至去看英文的资料手册(软件翻译真香)。最后差不多都搞懂1504的工作原理并且重做电路后出了效果。还是ADF4351做锁相环香,中途临时换的这个,效果还先出来。
MB1504详细原理
引脚分布(程序调试需要知道的部分引脚)
1,2脚作为参考频率源输入,一般使用12M或者12.8M晶振,但是用其他的频率也可以,知道原理就可以在程序上做出修改。
5脚作为负反馈的输出,是调控VCO的输入电压的,一定要经过环路滤波,一定要,一定要,一定要!!!
7脚为锁相输出,信号频率锁住了就会有个固定电平。一般电路上接个led来看。
8脚为VCO信号输入
13,14脚为可编程参考分频器输出与可变分频器输出,这两个脚在调试时最重要!!!如果这两个脚的效果没问题,PLL还不行,那肯定是硬件电路的问题。大胆甩锅
12脚接地时,进行负相关VCO调控。也就是说VCO的频率输出高了,那调控电压就往高了给。悬空或接高作为正相关调控,一般悬空就行。
11,10,9脚为程序输入口。经过一定时序可写入程序。
芯片简介
该芯片内含一个 14 位可编程参考分频器、一个输入频率最高为 520MHz 且分频比可选择(P=32 或 64)的双模前置分频器和一个 18 位的可变分频器(由 7 位的吞脉冲计数器和 11位的可编程计数器组成),另外还包含一个鉴相器、一个电荷泵和两个移位寄存器和锁存器。控制数据由两组串行数据构成,分别为 16 位的参考频率分频器控制数据(引自MB1504详细应资料)。详情请看我资料里面的“MB1504详细应资料”
可编程参考分频器是对输入的晶振频率分频作为参考频率。可变分频器是对VCO输入的频率进行分频。之后两个频率进行比较,作为调控的依据(调控的实现是芯片内部的事)。因为存在分频器,其单独作为分频器也是可以的。
经过1504调控的PLL输出频率公式:fvco=(PN+A) fosc/R (N>A)
P作为分频比只可选择32(SW=1)或64(SW=0),数据格式里的SW位对应了P值。N和A组成了可变分频器,R为参考分频器。(具体作用之后讲)
注意:N的范围为16-2047,A的范围为0-63,R的范围为8-16383。超过范围芯片将出错。以上内容在我给的资料与芯片手册皆有。
时序与数据格式
1504使用的是三根总线的传输模式。分别为LE,DATA,CLOCK。DATA为高电平时表示1,低电平时表示为0。在CLOCK产生一个上升沿后DATA的数据被1504读一位。当一次指令写完后让LE产生一个上升沿,写入的程序开始起作用。每次上电都要写程序!!!!!下面是时序图,唯一需要注意的是t1-t5>=1us。
我们知道,计算机只能认识0,1两个数,1504作为最简单的芯片,给其发生的数据也只能是以2进制的形式。1504的程序只有两种数据格式,先看对R,P写值的数据格式
这种数据格式一共有16位,发送顺序从右往左进行,第一位为SW位,是给P写值的。最后一位为控制位,1表示这是给R,P写值的数据。中间的是R的二进制值,例如要让R=200,二进制值为1100 1000,发送顺序为 0001 0011 0000 00,不足的为以0补齐。
这是给N,A写值的数据格式,同上面一样,从右往左发送。先发N,在发A,发送的二进制值也是先从高位开始。最后的控制位为0,表示这是写给N,A的数据。
调试方法与效果
注意:在调试时一定要先了解芯片的写入时序与数据格式了解,我给的资料都有,而且学了数电的一目了然。
- 可编程参考分频器
程序上对应为R值和P值,P在下面讲。1504会将外接晶振的信号分频作为参考频率。并且将会在13脚输出一个相同频率的占空比极小的方波。例如12M晶振,编程设定R=480,参考分频输出为25khz的方波。如果13脚输出的频率和预期一样,并且可根据程序改变,那证明可编程参考分频器是成功写入程序的。 - 可变分频器
分为吞脉冲计数器,程序上对应A,可编程计数器,程序上对应N。叫啥不重要,知道咋用就行。1504会将VCO输入的信号进行分频再与参考分频作比较。其分频系数为PN+A,P和N相乘。然后在14脚输出一个对应频率的方波。如果其输出的频率与输入信号的频率倍数和分频系数相同,那证明可变分频器是写入成功的。至此,程序员的工作完成!欢呼吧!剩下的就是硬件的事了。(高频电路硬件才是最困难的)
再吐槽一波,我找的文章都没有说N,A和P在硬件上的作用,就扔了一个总公式,导致我一直不明白为什么要叫分频器。明明是乘一个频率,不应该叫倍频器吗?知道我了解14脚的作用后才想清楚的。因此,14脚也可作为分频器的输出。
程序简介(一定要看)
我根据网上的程序自己写了一个stm32f103的程序,并且移植方便。但是还有很多缺陷,在此讲解一下。
如果要移植其他单片机,改一下这里。我相信大家能一眼看出,这里不再赘述。
移植时,MB1504_Init也要改,长短延时也要改,不用给ms级延时,1或2us延时就行了。这里出现的长短延时是因为我之前调试的时候为了排除时序问题做的尝试,单用一个也行。
这里是最重要的,因为fre和t是没用的,要改频率直接修改R,N,A的值。但是,如果看懂这篇文章,是可以写出fre与N,A的对应关系的。至于R,因为我使用的12.8M晶振,步进25khz,所以是512。同样,看懂这篇文章,也能根据实际需求改。
提问:这个程序输出的频率是多少?
结尾
作为对一个多月的调试的纪念我写了这篇文章。虽然最终效果离预期还差一点,频率是稳住了,但是可调范围只有20M的带宽。不过我相信我们一定能完美的完成的。第一次做的锁相环程序让我收获颇丰,希望也能帮到读这篇文章的朋友,如果还有什么问题可以留下联系方式,我看到后可以互相探讨一下。最后,感谢你耐着性子的看完这篇文件,请指出我的不足之处,谢谢。
答案:80MHZ
锁相频率为115M,放个效果图: