设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 210|回复: 1
收起左侧

Quartus Verilog HDL/FPGA 3个IO口输出3通道8位高频PWM波并调制50HZ正弦波三相交流电

[复制链接]
发表于 2023-4-13 14:54:52 | 显示全部楼层 |阅读模式
main.png
  1. module pwm_8bit(                //8位PWM发生器模块
  2.         input clk,                        //时钟输入
  3.         input [7:0] pwm,        //占空比 0:低电平 255:高电平
  4.         output out                        //PWM波输出 PWM频率:时钟频率/256
  5. );
  6. reg [7:0] spwm;
  7. reg [7:0] i;
  8. assign out = (i < spwm) ? 1'b1 : 1'b0;
  9. always @(posedge clk) begin
  10.         if(!i) begin
  11.                 spwm <= pwm;
  12.         end
  13.         i = i + 8'd1;
  14.         if(&i) begin
  15.                 i = 8'd0;
  16.         end
  17. end
  18. endmodule

  19. module sinusoidal_8bit(                //8位正弦波发生器模块 (查表法)
  20.         input clk,                                        //时钟输入
  21.         input [7:0] pc2,                        //相位角度偏移:0~255
  22.         output [7:0] pwm                        //PWM值输出 正弦波频率:时钟频率/256
  23. );
  24. reg [7:0] pc;
  25. initial pc = 8'd0;
  26. wire [7:0] s [255:0];
  27. assign s[8'h00]=8'h7F;
  28. assign s[8'h01]=8'h81;
  29. assign s[8'h02]=8'h83;
  30. assign s[8'h03]=8'h88;
  31. assign s[8'h04]=8'h8A;
  32. assign s[8'h05]=8'h8F;
  33. assign s[8'h06]=8'h91;
  34. assign s[8'h07]=8'h93;
  35. assign s[8'h08]=8'h97;
  36. assign s[8'h09]=8'h9A;
  37. assign s[8'h0A]=8'h9E;
  38. assign s[8'h0B]=8'hA0;
  39. assign s[8'h0C]=8'hA2;
  40. assign s[8'h0D]=8'hA6;
  41. assign s[8'h0E]=8'hA9;
  42. assign s[8'h0F]=8'hAD;
  43. assign s[8'h10]=8'hAF;
  44. assign s[8'h11]=8'hB3;
  45. assign s[8'h12]=8'hB5;
  46. assign s[8'h13]=8'hB7;
  47. assign s[8'h14]=8'hBB;
  48. assign s[8'h15]=8'hBD;
  49. assign s[8'h16]=8'hC1;
  50. assign s[8'h17]=8'hC3;
  51. assign s[8'h18]=8'hC4;
  52. assign s[8'h19]=8'hC8;
  53. assign s[8'h1A]=8'hCA;
  54. assign s[8'h1B]=8'hCD;
  55. assign s[8'h1C]=8'hCF;
  56. assign s[8'h1D]=8'hD1;
  57. assign s[8'h1E]=8'hD4;
  58. assign s[8'h1F]=8'hD6;
  59. assign s[8'h20]=8'hD9;
  60. assign s[8'h21]=8'hDB;
  61. assign s[8'h22]=8'hDE;
  62. assign s[8'h23]=8'hDF;
  63. assign s[8'h24]=8'hE1;
  64. assign s[8'h25]=8'hE3;
  65. assign s[8'h26]=8'hE5;
  66. assign s[8'h27]=8'hE7;
  67. assign s[8'h28]=8'hE9;
  68. assign s[8'h29]=8'hEA;
  69. assign s[8'h2A]=8'hEC;
  70. assign s[8'h2B]=8'hED;
  71. assign s[8'h2C]=8'hF0;
  72. assign s[8'h2D]=8'hF1;
  73. assign s[8'h2E]=8'hF2;
  74. assign s[8'h2F]=8'hF3;
  75. assign s[8'h30]=8'hF4;
  76. assign s[8'h31]=8'hF6;
  77. assign s[8'h32]=8'hF7;
  78. assign s[8'h33]=8'hF8;
  79. assign s[8'h34]=8'hF9;
  80. assign s[8'h35]=8'hFA;
  81. assign s[8'h36]=8'hFB;
  82. assign s[8'h37]=8'hFB;
  83. assign s[8'h38]=8'hFC;
  84. assign s[8'h39]=8'hFD;
  85. assign s[8'h3A]=8'hFD;
  86. assign s[8'h3B]=8'hFE;
  87. assign s[8'h3C]=8'hFE;
  88. assign s[8'h3D]=8'hFE;
  89. assign s[8'h3E]=8'hFE;
  90. assign s[8'h3F]=8'hFE;
  91. assign s[8'h40]=8'hFF;
  92. assign s[8'h41]=8'hFE;
  93. assign s[8'h42]=8'hFE;
  94. assign s[8'h43]=8'hFE;
  95. assign s[8'h44]=8'hFE;
  96. assign s[8'h45]=8'hFE;
  97. assign s[8'h46]=8'hFD;
  98. assign s[8'h47]=8'hFD;
  99. assign s[8'h48]=8'hFC;
  100. assign s[8'h49]=8'hFB;
  101. assign s[8'h4A]=8'hFB;
  102. assign s[8'h4B]=8'hFA;
  103. assign s[8'h4C]=8'hF9;
  104. assign s[8'h4D]=8'hF8;
  105. assign s[8'h4E]=8'hF7;
  106. assign s[8'h4F]=8'hF6;
  107. assign s[8'h50]=8'hF5;
  108. assign s[8'h51]=8'hF3;
  109. assign s[8'h52]=8'hF3;
  110. assign s[8'h53]=8'hF1;
  111. assign s[8'h54]=8'hF0;
  112. assign s[8'h55]=8'hED;
  113. assign s[8'h56]=8'hEC;
  114. assign s[8'h57]=8'hEB;
  115. assign s[8'h58]=8'hE9;
  116. assign s[8'h59]=8'hE7;
  117. assign s[8'h5A]=8'hE5;
  118. assign s[8'h5B]=8'hE3;
  119. assign s[8'h5C]=8'hE2;
  120. assign s[8'h5D]=8'hDF;
  121. assign s[8'h5E]=8'hDE;
  122. assign s[8'h5F]=8'hDB;
  123. assign s[8'h60]=8'hD9;
  124. assign s[8'h61]=8'hD8;
  125. assign s[8'h62]=8'hD4;
  126. assign s[8'h63]=8'hD3;
  127. assign s[8'h64]=8'hCF;
  128. assign s[8'h65]=8'hCD;
  129. assign s[8'h66]=8'hCA;
  130. assign s[8'h67]=8'hC8;
  131. assign s[8'h68]=8'hC6;
  132. assign s[8'h69]=8'hC3;
  133. assign s[8'h6A]=8'hC1;
  134. assign s[8'h6B]=8'hBD;
  135. assign s[8'h6C]=8'hBB;
  136. assign s[8'h6D]=8'hB9;
  137. assign s[8'h6E]=8'hB5;
  138. assign s[8'h6F]=8'hB3;
  139. assign s[8'h70]=8'hAF;
  140. assign s[8'h71]=8'hAD;
  141. assign s[8'h72]=8'hAB;
  142. assign s[8'h73]=8'hA6;
  143. assign s[8'h74]=8'hA4;
  144. assign s[8'h75]=8'hA0;
  145. assign s[8'h76]=8'h9E;
  146. assign s[8'h77]=8'h9A;
  147. assign s[8'h78]=8'h97;
  148. assign s[8'h79]=8'h95;
  149. assign s[8'h7A]=8'h91;
  150. assign s[8'h7B]=8'h8F;
  151. assign s[8'h7C]=8'h8A;
  152. assign s[8'h7D]=8'h88;
  153. assign s[8'h7E]=8'h86;
  154. assign s[8'h7F]=8'h81;
  155. assign s[8'h80]=8'h7F;
  156. assign s[8'h81]=8'h7B;
  157. assign s[8'h82]=8'h78;
  158. assign s[8'h83]=8'h76;
  159. assign s[8'h84]=8'h72;
  160. assign s[8'h85]=8'h6F;
  161. assign s[8'h86]=8'h6B;
  162. assign s[8'h87]=8'h69;
  163. assign s[8'h88]=8'h64;
  164. assign s[8'h89]=8'h62;
  165. assign s[8'h8A]=8'h60;
  166. assign s[8'h8B]=8'h5C;
  167. assign s[8'h8C]=8'h5A;
  168. assign s[8'h8D]=8'h55;
  169. assign s[8'h8E]=8'h53;
  170. assign s[8'h8F]=8'h51;
  171. assign s[8'h90]=8'h4D;
  172. assign s[8'h91]=8'h4B;
  173. assign s[8'h92]=8'h47;
  174. assign s[8'h93]=8'h45;
  175. assign s[8'h94]=8'h43;
  176. assign s[8'h95]=8'h3F;
  177. assign s[8'h96]=8'h3D;
  178. assign s[8'h97]=8'h3A;
  179. assign s[8'h98]=8'h38;
  180. assign s[8'h99]=8'h34;
  181. assign s[8'h9A]=8'h32;
  182. assign s[8'h9B]=8'h31;
  183. assign s[8'h9C]=8'h2D;
  184. assign s[8'h9D]=8'h2B;
  185. assign s[8'h9E]=8'h28;
  186. assign s[8'h9F]=8'h26;
  187. assign s[8'hA0]=8'h25;
  188. assign s[8'hA1]=8'h22;
  189. assign s[8'hA2]=8'h20;
  190. assign s[8'hA3]=8'h1D;
  191. assign s[8'hA4]=8'h1C;
  192. assign s[8'hA5]=8'h1B;
  193. assign s[8'hA6]=8'h18;
  194. assign s[8'hA7]=8'h17;
  195. assign s[8'hA8]=8'h14;
  196. assign s[8'hA9]=8'h13;
  197. assign s[8'hAA]=8'h11;
  198. assign s[8'hAB]=8'h0F;
  199. assign s[8'hAC]=8'h0E;
  200. assign s[8'hAD]=8'h0C;
  201. assign s[8'hAE]=8'h0B;
  202. assign s[8'hAF]=8'h0A;
  203. assign s[8'hB0]=8'h09;
  204. assign s[8'hB1]=8'h08;
  205. assign s[8'hB2]=8'h06;
  206. assign s[8'hB3]=8'h06;
  207. assign s[8'hB4]=8'h04;
  208. assign s[8'hB5]=8'h04;
  209. assign s[8'hB6]=8'h03;
  210. assign s[8'hB7]=8'h02;
  211. assign s[8'hB8]=8'h02;
  212. assign s[8'hB9]=8'h01;
  213. assign s[8'hBA]=8'h01;
  214. assign s[8'hBB]=8'h00;
  215. assign s[8'hBC]=8'h00;
  216. assign s[8'hBD]=8'h00;
  217. assign s[8'hBE]=8'h00;
  218. assign s[8'hBF]=8'h00;
  219. assign s[8'hC0]=8'h00;
  220. assign s[8'hC1]=8'h00;
  221. assign s[8'hC2]=8'h00;
  222. assign s[8'hC3]=8'h00;
  223. assign s[8'hC4]=8'h00;
  224. assign s[8'hC5]=8'h01;
  225. assign s[8'hC6]=8'h01;
  226. assign s[8'hC7]=8'h01;
  227. assign s[8'hC8]=8'h02;
  228. assign s[8'hC9]=8'h03;
  229. assign s[8'hCA]=8'h04;
  230. assign s[8'hCB]=8'h04;
  231. assign s[8'hCC]=8'h06;
  232. assign s[8'hCD]=8'h06;
  233. assign s[8'hCE]=8'h07;
  234. assign s[8'hCF]=8'h09;
  235. assign s[8'hD0]=8'h0A;
  236. assign s[8'hD1]=8'h0B;
  237. assign s[8'hD2]=8'h0C;
  238. assign s[8'hD3]=8'h0D;
  239. assign s[8'hD4]=8'h0F;
  240. assign s[8'hD5]=8'h11;
  241. assign s[8'hD6]=8'h13;
  242. assign s[8'hD7]=8'h14;
  243. assign s[8'hD8]=8'h15;
  244. assign s[8'hD9]=8'h18;
  245. assign s[8'hDA]=8'h19;
  246. assign s[8'hDB]=8'h1C;
  247. assign s[8'hDC]=8'h1D;
  248. assign s[8'hDD]=8'h20;
  249. assign s[8'hDE]=8'h22;
  250. assign s[8'hDF]=8'h23;
  251. assign s[8'hE0]=8'h26;
  252. assign s[8'hE1]=8'h28;
  253. assign s[8'hE2]=8'h2B;
  254. assign s[8'hE3]=8'h2D;
  255. assign s[8'hE4]=8'h2F;
  256. assign s[8'hE5]=8'h32;
  257. assign s[8'hE6]=8'h34;
  258. assign s[8'hE7]=8'h38;
  259. assign s[8'hE8]=8'h3A;
  260. assign s[8'hE9]=8'h3B;
  261. assign s[8'hEA]=8'h3F;
  262. assign s[8'hEB]=8'h41;
  263. assign s[8'hEC]=8'h45;
  264. assign s[8'hED]=8'h47;
  265. assign s[8'hEE]=8'h4B;
  266. assign s[8'hEF]=8'h4D;
  267. assign s[8'hF0]=8'h4F;
  268. assign s[8'hF1]=8'h53;
  269. assign s[8'hF2]=8'h55;
  270. assign s[8'hF3]=8'h5A;
  271. assign s[8'hF4]=8'h5C;
  272. assign s[8'hF5]=8'h5E;
  273. assign s[8'hF6]=8'h62;
  274. assign s[8'hF7]=8'h64;
  275. assign s[8'hF8]=8'h69;
  276. assign s[8'hF9]=8'h6B;
  277. assign s[8'hFA]=8'h6D;
  278. assign s[8'hFB]=8'h72;
  279. assign s[8'hFC]=8'h74;
  280. assign s[8'hFD]=8'h78;
  281. assign s[8'hFE]=8'h7B;
  282. assign s[8'hFF]=8'h7F;

  283. assign pwm = s[pc+pc2];
  284. always @(posedge clk) begin
  285.         pc <= pc + 8'd1;
  286. end
  287. endmodule

  288. module main(                //按比例生成1V三相交流电 (实际电压与FPGA额定电压有关)
  289.         input clk,                //50Mhz 有源晶振 Pin17
  290.         output sinA,        //相位A Pin40 使用万用表交流档测量相位电压
  291.         output sinB,        //相位B Pin42 测量不准确可并联瓷片电容滤除高频PWM
  292.         output sinC                //相位C Pin44 相与地电压:1V 相与相电压:1*(3^0.5)=1.73V
  293. );

  294. integer i =0;
  295. reg clkB = 1'b0;
  296. always @(posedge clk) begin
  297.         i = i + 1;
  298.         if(i >= 50000000/2/256/50) begin
  299.                 i = 0;
  300.                 clkB <= !clkB;
  301.         end
  302. end
  303. wire [7:0] pwmA;
  304. wire [7:0] pwmB;
  305. wire [7:0] pwmC;

  306. sinusoidal_8bit sin_A(.clk(clkB),.pc2(8'h00),.pwm(pwmA));                //相位0度
  307. sinusoidal_8bit sin_B(.clk(clkB),.pc2(8'h55),.pwm(pwmB));                //相位120度
  308. sinusoidal_8bit sin_C(.clk(clkB),.pc2(8'hAA),.pwm(pwmC));                //相位240度

  309. pwm_8bit pwm_A(.clk(clk),.pwm(pwmA),.out(sinA));
  310. pwm_8bit pwm_B(.clk(clk),.pwm(pwmB),.out(sinB));
  311. pwm_8bit pwm_C(.clk(clk),.pwm(pwmC),.out(sinC));
  312. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-16 20:59 , Processed in 0.528030 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表