历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | AVR+FPGA实现六路闭环电流控制程序

2019-12-05 来源:elecfans

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;


entity XTKZQ is

port(

    rst,clk        :    in        std_logic;    --时钟和复位信号,复位信号由AVR初始化手动给出

    --avr 读写相关信号线

    ale,rd,wr    :    in         std_logic;    --地址锁存、读、写信号

    ad            :    inout    std_logic_vector(7 downto 0);    --地址数据复用信号线

    

    --LED指示灯

    led1,led2    :    out        std_logic;

    

    --pwm

    pwm1,pwm2,pwm3,pwm4,pwm5,pwm6    :    out        std_logic;

    

    --ad8364信号线

    adc_d:                          in    std_logic_vector(15 downto 0);

    adc_a0,adc_a1,adc_a2:              out   std_logic;

    adc_reset:                       out   std_logic;

    adc_cs:                          out   std_logic;

    adc_wr:                          out   std_logic;

    adc_rd:                          out   std_logic;

    adc_holda,adc_holdb,adc_holdc:    out    std_logic;

    adc_eoc:                         in    std_logic; 

    adcclk_out:                         out   std_logic;

    --放大增益控制,此处每一路AD设置了两级放大增益

    sw11:        out        std_logic;--控制模拟开关,调节放大增益

    sw12:        out        std_logic;

    sw21:        out        std_logic;

    sw22:        out        std_logic;

    sw31:        out        std_logic;

    sw32:        out        std_logic;

    sw41:        out        std_logic;

    sw42:        out        std_logic;

    sw51:        out        std_logic;

    sw52:        out        std_logic;

    sw61:        out        std_logic;

    sw62:        out        std_logic

    );

end XTKZQ;


architecture art of  XTKZQ is

------------------------------------------------全局信号定义-------------------------------------------------------------------    

--avr访问操作相关信号

signal adr            :   std_logic_vector(7 downto 0);  --地址寄存器

signal data_buf        :   std_logic_vector(7 downto 0);

signal data_outctl    :     std_logic;

--pwm控制部分有三组变量,第一组是由avr写入,控制相应的占空比,这个是供调试使用

--第二组是自动pid控制使用的

--第三组是pwm计数使用的,根据pid_sw开关的设置决定读入第一组还是第二组的值

--pwm部分相关寄存器定义 寄存器暂时定义为8位

signal pwmfreq_reg    :    std_logic_vector(7 downto 0);

signal pwmocr1_reg    :    std_logic_vector(7 downto 0);

signal pwmocr2_reg    :    std_logic_vector(7 downto 0);

signal pwmocr3_reg    :    std_logic_vector(7 downto 0);

signal pwmocr4_reg    :    std_logic_vector(7 downto 0);

signal pwmocr5_reg    :    std_logic_vector(7 downto 0);

signal pwmocr6_reg    :    std_logic_vector(7 downto 0);


--pwm部分PID调节中用到的相关变量

signal pwmfreq_pid    :    std_logic_vector(7 downto 0);

signal pwmocr1_pid    :    std_logic_vector(7 downto 0);

signal pwmocr2_pid    :    std_logic_vector(7 downto 0);

signal pwmocr3_pid    :    std_logic_vector(7 downto 0);

signal pwmocr4_pid    :    std_logic_vector(7 downto 0);

signal pwmocr5_pid    :    std_logic_vector(7 downto 0);

signal pwmocr6_pid    :    std_logic_vector(7 downto 0);


--PWM计数用到的相关变量,这里定义为8位

signal pwm_cnt        :    std_logic_vector(7 downto 0);

signal pwmfreq        :    std_logic_vector(7 downto 0);

signal pwmocr1        :    std_logic_vector(7 downto 0);

signal pwmocr2        :    std_logic_vector(7 downto 0);

signal pwmocr3        :    std_logic_vector(7 downto 0);

signal pwmocr4        :    std_logic_vector(7 downto 0);

signal pwmocr5        :    std_logic_vector(7 downto 0);

signal pwmocr6        :    std_logic_vector(7 downto 0);



--自动闭环控制相关寄存器定义

signal pid_sw        :    std_logic_vector(7 downto 0); --闭环控制开关,此寄存器为0x01时开启自动闭环控制


--六个AD寄存器位,用于存放设定的AD值

signal adcset1h_reg,adcset1l_reg,adcset2h_reg,adcset2l_reg        :    std_logic_vector(7 downto 0);

signal adcset3h_reg,adcset3l_reg,adcset4h_reg,adcset4l_reg        :    std_logic_vector(7 downto 0);

signal adcset5h_reg,adcset5l_reg,adcset6h_reg,adcset6l_reg        :    std_logic_vector(7 downto 0);

--时钟分频相关变量

signal clkcnt        :    std_logic_vector(16 downto 0);

signal adc_clk        :    std_logic;    --adc时钟信号

signal pwm_clk        :    std_logic;    --pwm时钟信号

signal pid_clk        :    std_logic;    --pid时钟信号,用于调节pid的反应速度



--led指示相关变量

signal led_clk        :    std_logic;    --led时钟信

signal led1_cnt        :    std_logic_vector(7 downto 0);

signal led2_cnt        :     std_logic_vector(7 downto 0);

signal led1s        :    std_logic;

signal led2s        :    std_logic;


--ads8364信号

signal adcdata1h_reg,adcdata1l_reg,adcdata2h_reg,adcdata2l_reg    :    std_logic_vector(7 downto 0);

signal adcdata3h_reg,adcdata3l_reg,adcdata4h_reg,adcdata4l_reg    :    std_logic_vector(7 downto 0);

signal adcdata5h_reg,adcdata5l_reg,adcdata6h_reg,adcdata6l_reg    :    std_logic_vector(7 downto 0);

signal adc_data_buf :    std_logic_vector(15 downto 0);


--定义读取过程的各个状态

--13位控制分别为 hold adc_a rd 状态机状态5位     hhhabcr

---------------------------------------------------98365

constant st0    :std_logic_vector(11 downto 0):="000000100000";--启动转换

constant st1    :std_logic_vector(11 downto 0):="111000100001";--进入17个周期等待转换结束,不检测EOC

constant st2    :std_logic_vector(11 downto 0):="111000100010";

constant st3    :std_logic_vector(11 downto 0):="111000100011";

constant st4    :std_logic_vector(11 downto 0):="111000100100";

constant st5    :std_logic_vector(11 downto 0):="111000100101";

constant st6    :std_logic_vector(11 downto 0):="111000100110";

constant st7    :std_logic_vector(11 downto 0):="111000100111";

constant st8    :std_logic_vector(11 downto 0):="111000101000";

constant st9    :std_logic_vector(11 downto 0):="111000101001";

constant st10    :std_logic_vector(11 downto 0):="111000101010";

constant st11    :std_logic_vector(11 downto 0):="111000101011";

constant st12    :std_logic_vector(11 downto 0):="111000101100";

constant st13    :std_logic_vector(11 downto 0):="111000101101";

constant st14    :std_logic_vector(11 downto 0):="111000101110";

constant st15    :std_logic_vector(11 downto 0):="111000101111";

constant st16    :std_logic_vector(11 downto 0):="111000110000";

constant st17    :std_logic_vector(11 downto 0):="111000110001";

constant st18    :std_logic_vector(11 downto 0):="111000110010";

constant st19    :std_logic_vector(11 downto 0):="111000010011";--读ch1数据

constant st20    :std_logic_vector(11 downto 0):="111001110100";

constant st21    :std_logic_vector(11 downto 0):="111001010101";--读ch2数据

constant st22    :std_logic_vector(11 downto 0):="111010110110";

constant st23    :std_logic_vector(11 downto 0):="111010010111";--读ch3数据

constant st24    :std_logic_vector(11 downto 0):="111011111000";

constant st25    :std_logic_vector(11 downto 0):="111011011001";--读ch4数据

constant st26    :std_logic_vector(11 downto 0):="111100111010";

constant st27    :std_logic_vector(11 downto 0):="111100011011";--读ch5数据

constant st28    :std_logic_vector(11 downto 0):="111101111100";

constant st29    :std_logic_vector(11 downto 0):="111101011101";--读ch6数据

推荐阅读

史海拾趣

ADATA公司的发展小趣事

ADATA科技成立于2001年,是一家专注于提供存储解决方案的公司,以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: ADATA科技成立于2001年,总部位于台湾新北市,最初致力于生产和销售DRAM模块。随着存储技术的不断发展,公司逐渐扩展了业务范围,涵盖了闪存产品、固态硬盘、移动存储设备等多个领域。

  2. 技术创新与产品推出: ADATA科技在存储领域进行了持续的技术创新,并推出了一系列具有竞争力的产品。公司不断提升产品性能、降低成本,并注重产品的设计和用户体验。除了传统的DRAM模块,公司还推出了闪存卡、固态硬盘、移动硬盘等产品,满足了不同客户和市场的需求。

  3. 市场拓展与国际化发展: ADATA科技积极拓展国内外市场,并逐步实现了国际化发展。公司产品远销全球各地,与全球范围内的主要零售商、电子产品制造商建立了合作关系。通过与合作伙伴的紧密合作,公司产品在国际市场上得到了广泛认可和好评。

  4. 品牌建设与市场影响力: ADATA科技通过持续的品牌建设活动,不断提升了在存储领域的市场影响力。公司参加各类行业展会、展示活动,并投入大量资源进行市场推广和宣传。同时,公司还与体育、文化等领域开展赞助活动,提升品牌知名度和美誉度。

  5. 未来展望与持续发展: 作为一家专注于存储解决方案的企业,ADATA科技将继续致力于技术创新和产品开发。公司将不断改进现有产品,推出更多性能更好、功能更丰富的存储产品,以满足不断变化的市场需求。同时,公司还将继续拓展国际市场,加强与合作伙伴的合作,实现业务的持续增长和发展。

Euvis Inc公司的发展小趣事

随着科技的不断进步和消费者需求的日益多样化,电子行业面临着巨大的变革压力。Euvis Inc公司敏锐地洞察到这一趋势,积极调整战略方向,将业务拓展至物联网、智能家居等新兴领域。通过不断的技术创新和市场拓展,公司成功应对了行业变革带来的挑战,保持了持续的发展势头。

台湾丰宾(CapXon)公司的发展小趣事

CapXon公司一直高度重视品质管理,建立了完善的质量管理体系和检测机制。公司严格把控原材料采购、生产过程、成品检验等各个环节,确保产品的品质符合国际标准和客户要求。同时,CapXon还不断优化生产流程,提高生产效率,降低生产成本,为客户提供更具竞争力的价格和服务。

ddm hopt + schuler GmbH & Co KG公司的发展小趣事

随着全球对环境保护意识的增强,ddm hopt + schuler公司开始关注绿色制造和可持续发展。公司投入大量资源进行绿色生产技术的研发,成功开发出一系列节能、环保的电子生产设备。这些设备在保障生产效率和产品质量的同时,显著降低了能源消耗和废弃物排放。这一举措不仅提升了公司的品牌形象,也赢得了客户和市场的广泛赞誉。

博众电气(BZCN)公司的发展小趣事

随着市场的不断扩大,博众电气意识到质量是企业生存和发展的关键。因此,公司决定引入国际先进的质量管理体系,全面提升产品质量和服务水平。通过严格的质量控制和持续改进,博众电气的产品质量得到了显著提升,客户满意度也大幅提高。这一举措不仅增强了公司的市场竞争力,还为公司的长远发展奠定了坚实基础。

Ametek公司的发展小趣事

博众电气深知人才是企业发展的核心力量。因此,公司高度重视人才培养和团队建设。通过引进优秀人才、建立完善的培训体系、营造良好的企业文化等措施,博众电气成功打造了一支高素质、专业化的团队。这支团队不仅为公司的发展提供了有力的人才保障,还为公司不断创新和进步注入了源源不断的动力。

这五个故事只是博众电气发展起来的冰山一角。在电子行业的激烈竞争中,博众电气凭借技术突破、质量管理体系建设、环保理念、国际化战略以及人才培养与团队建设等举措,不断壮大自身实力,逐步成为行业内的佼佼者。未来,博众电气将继续秉持创新、质量、环保、国际化和人才的理念,不断追求卓越,为实现更加辉煌的成就而努力拼搏。

问答坊 | AI 解惑

求高手分析下面这个电路

c11,是信号耦合作用,这个我知道,R23,R39,R40,C32这几个元件的作用是什么?越详细越好 谢了!…

查看全部问答>

matlab第五课预告

主要将符号表达式 主要内容 符号表达式的微分,几分,绘图,符号方程的求解 等等吧…

查看全部问答>

运放~~模电的重点

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 运放~~模电的重点~~~~~~~~~~~~~~~~~~  …

查看全部问答>

集成电路封装概述

集成电路封装概述…

查看全部问答>

集成RF混频器与无源混频器方案的性能比较

摘要:本应用笔记比较了集成RF混频器与无源混频器方案的整体性能,论述了两种方案的主要特征,并指出集成方案相对于无源方案的主要优点。 过去,RF研发人员在高性能接收器设计中使用无源下变频混频器取得了较好的整体线性指标和杂散指标。但在这 ...…

查看全部问答>

Pause trigger

Pause Trigger,它根据触发信号的电平来决定是否执行采集,也就是说可以在采集开始后暂停或继续采集. 可以在时钟属性中设置这种方式。一般需要采用外部时钟或计数器时钟。…

查看全部问答>

请介绍一下SD卡(SDIO接口)的PIN脚

什么地方有SD卡(SDIO接口)的PIN脚描述?(电源PIN,数据时钟PIN等)…

查看全部问答>

vs2005开发环境,C#语言开发的pda程序怎么不能操作sqlce2.0数据库怎么办

    我现在做的pda程序就是要操作sql ce2.0,但是用的vs2005和c#语言开发的程序好像不能操作它(能操作3.0)。     我现在数据库是不能动了,只能想办法来操作这个数据库,听说vs2003+c#是可以操作sql ce2.0数据库的,除了这 ...…

查看全部问答>

关于触摸屏校准

我现在的触摸屏已经可以响应点击,在中断处理程序中也已经可以取得触摸屏控制器采样的电压值了(分别对应x和y) 我想请问大家,怎样让这两个电压值和lcd的坐标对用起来? …

查看全部问答>

急求人才!!!

大家好!我这里是北京的猎头公司,现有几十个通信方面的职位虚席以待!请有意者与我联系,如果适合我们会及时为您做推荐,即使您现在没有这方面的意向,我觉得您跟我们联系对您来说也绝对不是什么坏事!至少我们可以根据您的简历及时向您提供适合的 ...…

查看全部问答>