欢迎您来到刘铎与能源革命这是一个以能源技术为目标的趣味网站
Language: ∷  English

设计与制作

太阳能输出控制器设计思路(原理图待出版)

  • 产品名称:太阳能输出控制器设计思路(原理图待出版)
  • 客服QQ:
  • 咨询电话: 0990575555
  • 电子邮箱: Duo@165V.com
  • 发布时间: 2021-11-22 16:30:02
  • 在线留言

我设计的太阳能电池板控制器电路芯片的工作原理如下:

说明:这是一个由太阳能电池板供电的电路当有阳光时电路开始工作,这时候启动了单片机的正常工作但是没有提供输出方式。
1. 编程芯片的第一电压检测脚检测太阳能电池板的电压前,PWM不工作。
2. 如果电压低于500mV,则表示太阳能电池板接受的阳光不足以开启输出模式。
3. 如果电压在 500mV 到800mV 之间,则表示太阳能电池板正常工作。
4. 编程芯片启动 PWM 系统的工作输出脚,控制最大占空比为80%。
5. 编程芯片的电压检测脚一直检测电压,从大于800mv开始输出10%的占空比为起点,待第二电压脚完成检测正常后,开始按每800mv-10mv递增2%的占空比,当检测脚的电压小于550mv时,开始按比例减少占空比,保持电压脚电压稳定在580-600mV之间。
6.启动第二个电压脚检测电压是否大于1000mv,大于说明输出无短路可以开启PWM的最小值10%,否则停止输出PWM。
7. 第二个电压脚检测输出电压,当输出电压高于需要达到的电压A时,开始按比例减少占空比,当电压达到关闭值B时,PWM停止输出。
7.  以上工作后,开启第三脚电流检测,取样标准值为20mv乘以1000作为显示数字使用,芯片脚输出数据包括输出电压标准值20mv乘以1000,写出这两个交替显示程序表达式。
8.  PWM输出脚,在启动时维持一个零电压,在所有检测工作正常后开始输出PWM进入正常工作中,工作频率设置为60KZ。

9·  芯片的选择,满足工作频率程序储存,脚最少的芯片型号。芯片外的驱动电路及取样电路等待我设计完成。

编程芯片:可以使用 ATmega328P、MSP430G2553、STM32F103C8T6 等具有 ADC 功能的微控制器。
电压检测脚:可以使用 ADC 的 CH0 引脚。
PWM 系统:可以使用外部 PWM 芯片,如 IR2153、TPIC6B595 等,也可以使用编程芯片内置的 PWM 功能。

这是设计思路代码

#include <avr/io.h>
#include <util/delay.h>

#define ADC_CH0 0
#define ADC_CH1 1
#define ADC_CH2 2

// 定义电压检测阈值
#define VOLTAGE_THRESHOLD_LOW 500
#define VOLTAGE_THRESHOLD_HIGH 800
#define OUTPUT_VOLTAGE_A 600
#define OUTPUT_VOLTAGE_B 550
#define OUTPUT_CURRENT_A 1000

// 定义 PWM 占空比
#define PWM_DUTY_CYCLE_START 10

// 定义 PWM 工作频率
#define PWM_FREQUENCY 60000

// 定义电流检测标准值
#define CURRENT_SAMPLE_VALUE 20

// 定义输出电压标准值
#define OUTPUT_VOLTAGE_SAMPLE_VALUE 20

void setup() {
 // 初始化 ADC
 ADCSRA |= (1 << ADPS2) | (1 << ADPS1); // 设置 ADC 分频系数为 128
 ADMUX |= (1 << REFS0); // 设置 ADC 基准电压为 AVCC

 // 初始化 PWM
 TCCR0A |= (1 << COM0A1) | (1 << WGM01) | (1 << WGM00); // 设置 PWM 模式为 CTC
 TCCR0B |= (1 << CS02) | (1 << CS00); // 设置 PWM 预分频系数为 1024
 OCR0A = PWM_DUTY_CYCLE_START; // 设置 PWM 占空比

 // 初始化输出电压检测
 DDRB |= (1 << PB1); // 设置 PB1 为输出

 // 初始化输出电流检测
 DDRB |= (1 << PB2); // 设置 PB2 为输出

 // 初始化输出数据显示
 DDRB |= (1 << PB3); // 设置 PB3 为输出
 DDRB |= (1 << PB4); // 设置 PB4 为输出
}

void loop() {
 // 检测太阳能电池板电压
 int voltage = analogRead(ADC_CH0);

 // 判断太阳能电池板是否可以输出
 if (voltage < VOLTAGE_THRESHOLD_LOW) {
   // 太阳能电池板电压不足,不能输出
   PORTB &= ~(1 << PB1); // 关闭 PWM
   PORTB &= ~(1 << PB3); // 关闭输出数据显示
 } else {
   // 太阳能电池板电压足够,可以输出
   PORTB |= (1 << PB1); // 打开 PWM

   // 检测输出电压
   int outputVoltage = analogRead(ADC_CH1);

   // 判断输出电压是否达到目标值
   if (outputVoltage > OUTPUT_VOLTAGE_A) {
     // 输出电压过高,减少 PWM 占空比
     OCR0A -= 2;
   } else if (outputVoltage < OUTPUT_VOLTAGE_B) {
     // 输出电压过低,增加 PWM 占空比
     OCR0A += 2;
   }

   // 检测输出电流
   int outputCurrent = analogRead(ADC_CH2);

   // 计算输出功率
   int outputPower = outputVoltage * outputCurrent;

   // 判断输出功率是否达到最大值
   if (outputPower >= OUTPUT_CURRENT_A) {
     // 输出功率达到最大值,保持 PWM 占空比不变
   } else {
     // 输出功率未达到最大值,增加 PWM 占空比
     OCR0A += 2;
   }

   // 交替显示输出电压和输出功率
   int displayValue = outputVoltage / CURRENT_SAMPLE_VALUE;
   PORTB |= (displayValue << 3);
   delay

设计与制作

谷歌广告