ad9854驱动_a4988驱动最佳电流

(1) 2024-08-14 18:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
ad9854驱动_a4988驱动最佳电流,希望能够帮助你!!!。

CSDN话题挑战赛第2期
参赛话题:学习笔记

AD9850/AD9851
AD9850/AD9851 模块是采用ADI 应用最广泛的DDS(AD9850 和 AD9851)制作的模块。
ADI 的性能就不用多说了。模块主要参考 AD9850 和 AD9851 的资料做的。

主要功能特点:

  • 模块能够输出正弦波和方波,2 个正弦波和 2 个方波输出。
    AD9850: 0-40MHz
    AD9851: 0-70MHz
    频率在 20-30MHz 后谐波越来越大,波形会越来越不干净。
    方波: 0-1MHz
  • 采用 70MHz 的低通滤波器,使波形的 SN 比更好
  • 比较器的基准输入端电压由可变电阻产生,调节该电阻可以得到不同的占空比方波
    注:在输出正弦波的情况下,接线到方波输出的 IO 口,直接调节
    蓝色的电位器可输出方波。
  • AD9850 模块采用 125MHz 的有源晶振,AD9851 模块采用 30MHZ 的有源晶振
    AD9850 和 AD9851 主要区别
  • AD9850 的时钟频率最高 125MHz,AD9851 的时钟频率最高 180MHz。输出最高频率
    AD9851 要比 AD9850 高。
  • AD9850 没有 6 倍频,AD9851 有

功能框图============================================================
ad9854驱动_a4988驱动最佳电流_https://bianchenghao6.com/blog__第1张

1:下载对应的驱动 程序

//***************************************************// //函数1: ad9850_reset() // //函数2: ad9850_reset_serial() // //函数3: ad9850_wr_parrel(unsigned char w0,double frequence)// //函数4: ad9850_wr_serial(unsigned char w0,double frequence)// //***************************************************// // 子程序说明 // //***************************************************// //函数1: ad9850_reset() // 复位ad9850,之后为并口写入模式  //函数2: ad9850_reset_serial() // 复位ad9850,之后为串口写入模式 //函数3: ad9850_wr_parrel(unsigned char w0,double frequence) // 并口写ad9850数据,w0为ad9850中w0的数据,frequence // 为写入的频率  //函数4: ad9850_wr_serial(unsigned char w0,double frequence) // 串口写ad9850数据,w0为ad9850中w0的数据,frequence // 为写入的频率  //需定义的位: //ad9850_w_clk ; //ad9850_fq_up ; //ad9850_rest ; //ad9850_bit_data ; //例: //sbit ad9850_w_clk =P2^2; //sbit ad9850_fq_up =P2^1; //sbit ad9850_rest =P2^0; //sbit ad9850_bit_data =P1^7; //***************************************************// // 写数据说明 // //***************************************************// //写数据例: // ad9850_reset() // wr_lcd02_data(unsigned char x) // ad9850_wr_parrel(0x01,1000) // ad9850_wr_serial(0x01,1000) //***************************************************// //---------------------------------------------------// // 程序 // //---------------------------------------------------// # include <reg51.h> # include <stdio.h> # include <intrins.h> sbit ad9850_w_clk =P2^2; //P2.2口接ad9850的w_clk脚/PIN7 sbit ad9850_fq_up =P2^1; //P2.1口接ad9850的fq_up脚/PIN8 sbit ad9850_rest =P2^0; //P2.0口接ad9850的rest脚/PIN12 sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25 //P1为8位数据口 //***************************************************// // ad9850复位(并口模式) // //---------------------------------------------------// void ad9850_reset() { 
    ad9850_w_clk=0; ad9850_fq_up=0; //rest信号 ad9850_rest=0; ad9850_rest=1; ad9850_rest=0; } //***************************************************// // ad9850复位(并口模式) // //---------------------------------------------------// void ad9850_reset_serial() { 
    ad9850_w_clk=0; ad9850_fq_up=0; //rest信号 ad9850_rest=0; ad9850_rest=1; ad9850_rest=0; //w_clk信号 ad9850_w_clk=0; ad9850_w_clk=1; ad9850_w_clk=0; //fq_up信号 ad9850_fq_up=0; ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 向ad9850中写命令与数据(并口) // //---------------------------------------------------// void ad9850_wr_parrel(unsigned char w0,double frequence) { 
    unsigned char w; long int y; double x; //计算频率的HEX值 x=/125;//适合125M晶振 //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!! frequence=frequence/; frequence=frequence*x; y=frequence; //写w0数据 w=w0; P1=w; //w0 ad9850_w_clk=1; ad9850_w_clk=0; //写w1数据 w=(y>>24); P1=w; //w1 ad9850_w_clk=1; ad9850_w_clk=0; //写w2数据 w=(y>>16); P1=w; //w2 ad9850_w_clk=1; ad9850_w_clk=0; //写w3数据 w=(y>>8); P1=w; //w3 ad9850_w_clk=1; ad9850_w_clk=0; //写w4数据 w=(y>>=0); P1=w; //w4 ad9850_w_clk=1; ad9850_w_clk=0; //移入始能 ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 向ad9850中写命令与数据(串口) // //---------------------------------------------------// void ad9850_wr_serial(unsigned char w0,double frequence) { 
    unsigned char i,w; long int y; double x; //计算频率的HEX值 x=/125;//适合125M晶振 //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!! frequence=frequence/; frequence=frequence*x; y=frequence; //写w4数据 w=(y>>=0); for(i=0;i<8;i++) { 
    ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w3数据 w=(y>>8); for(i=0;i<8;i++) { 
    ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w2数据 w=(y>>16); for(i=0;i<8;i++) { 
    ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w1数据 w=(y>>24); for(i=0;i<8;i++) { 
    ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w0数据 w=w0; for(i=0;i<8;i++) { 
    ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //移入始能 ad9850_fq_up=1; ad9850_fq_up=0; } //***************************************************// // 测试程序1000Hz // //---------------------------------------------------// main() { 
    P0=0x00; P1=0x00; P2=0x00; P3=0x00; //---------------------------------------------------// //---------------------------------------------------// //串行写1000Hz程序 ad9850_reset_serial(); ad9850_wr_serial(0x00,1000); //---------------------------------------------------// while(1) { 
    } } 

OUT1 和OUT2 端能测试到对应输出 1KHz 信号。如需测试方波,调节可变电位器, 可在方波 1 和方波 2 端测试到方波。

原理图:

ad9854驱动_a4988驱动最佳电流_https://bianchenghao6.com/blog__第2张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复