最大功率点跟踪 (MPPT) 太阳能充电控制器
1、应用介绍
在这个应用中,我们将使用 Arduino 并结合许多主动-被动电子设备构建我们自己的 MPPT 太阳能充电控制器。MPPT 表示最大功率点跟踪控制器(Maximum Power Point Tracking Controller)。大多数太阳能电池板产生的电压比为 12V 电池充电所需的电压高得多。12V充电板实际上会产生 16 到 18 伏特,视情况而定,但只需要大约 14.6 伏特即可为大多数 12V 电池充电。大部分电压都被浪费了。使用 MPPT 充电技术,我们可以将多余的电压转换为电流,因此我们可以提高效率。
在这篇文章中,我们将通过太阳能充电学习MPPT充电技术。在项目中,首先设计 MPPT 充电控制器的原理图。然后通过编写 Arduino C 代码。项目将使用20×4 LCD 屏幕上可视化与MPPT 太阳能充电控制器相关的所有充电参数。该代码具有测量太阳能电池板电压、电流、功率、电池电压、充电器状态、SOC、PWM 的所有参数和功能占空比,负载状态。
2、硬件准备
本次应用使用到的硬件配件如下:
序号 | 配件名称 | 数量 |
---|---|---|
1 | 20x4 LCD Display | 1 |
2 | ACS712 电流传感器 | 1 |
3 | IR2104 半桥驱动器 | 1 |
4 | 场效应管IRFZ44 | 4 |
5 | 三极管 2N2222A | 1 |
6 | 二极管 P6KE36CA | 1 |
7 | 二极管1N4148 | 2 |
8 | 按钮开关 | 2 |
9 | 电阻100K | 1 |
10 | 电阻20K | 2 |
11 | 电阻470K | 1 |
12 | 电阻10K | 3 |
13 | 电阻1K | 1 |
14 | 电阻220Ω | 6 |
15 | 电容器220uF | 1 |
16 | 电容器10uF | 2 |
17 | 电容器 0.1uF | 6 |
18 | 电感33uH | 1 |
19 | 红色LED | 1 |
20 | 绿色 LED | 1 |
21 | 蓝色 LED | 1 |
22 | 太阳能电池板 (12/24/36V) | 1 |
23 | 铅酸蓄电池 12V | 1 |
24 | 接线端子 | 3 |
25 | 母头 | 2套 |
26 | 直流插孔 | 1 |
27 | 二极管1N4007 | 1 |
28 | Arduino Nano | 1 |
元器件如下图所示:
3、太阳能充电控制器介绍
太阳能充电控制器是一种电子设备,可调节从太阳能电池板到电池或电池组的电流。
每个带有电池的太阳能电池板系统都需要一个充电控制器,其目的是调节和控制从太阳能电池板到电池的电力,以延长电池的健康。
充电控制器分为三种类型:
-
简单的开关控制器(ON OFF)
-
脉冲宽度调制控制器 (PWM)
-
最大功率点跟踪控制器 (MPPT)
开关控制器 是非常简单的设备。
脉冲宽度调制控制器 的充电速度比开关控制器快一点,然后随着电池充满,它们会逐渐降低电压。当电池充满时,控制器会切换到浮动充电模式,基本上只是保持涓流进入电池以防止其放电的电流。 PWM 控制器 将通过简单的开关控制器延长电池的寿命。
**最大功率点跟踪控制器 (MPPT)**是一种电子设备,它通过最大化存储在太阳能电池板中的太阳能电池板的电量来调节太阳能电池板电池的充电,以匹配最佳充电电压电池。
Maximum PowerPoint 跟踪控制器比上面提到的两种旧类型更先进、更高效。这些控制器足够智能,能够将过剩电压转换为通常会被 PWM 控制器浪费掉的额外电流。
大多数太阳能电池板产生的电压比为 12V 电池充电所需的电压高得多,如果您有这种配置,则为 24 或 48 伏特。12V 充电板实际上会产生 16 至 18 伏特,具体取决于条件,但只需要大约 14.6 伏特为大多数 12V 电池充电。因此,MPPT 控制器可以将这些额外的电压转换为更多电流,从而更快地为电池充电,效率更高。
MPPT 太阳能充电控制器的优缺点:
MPPT 控制器可以将这些额外的电压转换成更多的电流,这将更快地为电池充电并且效率更高。MPPT 控制器的另一个优势是它们可以处理太阳能电池板的更高电压配置,以帮助最大限度地减少电压降或线路损耗。换句话说,您可以串联更多的太阳能电池板以增加输入电压,从而允许您运行更小规格的电线或在电池板和充电控制器之间传输更远的距离而不会造成大损失。脉宽调制控制器。
因此,如果您并网并想添加一些电池作为备用电源,MPPT 是唯一可行的方法。MPPT 控制器的效率约为 94% 至 99%,最高可达 30%效率高于类似的 PWM 控制器。
MPPT 控制器对于寒冷气候或多云地区的离网太阳能电池板系统至关重要,因为它们可以提取可用的每一点太阳能。MPPT 的唯一其他缺点之一是它们不能很好地工作在弱光条件下效果很好,因为他们很难找到最大功率的最佳点。幸运的是,这些条件不会持续很长时间,而且它足以弥补一天剩下的时间。
4、 硬件设计
现在让我们使用 Arduino 设计 MPPT 太阳能充电控制器项目。项目将实现如目标:
- 基于MPPT算法
- 多个 LED 指示充电状态
- 20×4字符液晶显示屏,用于显示电压、电流、功率、负载状态等。
- 过电压/防雷保护
- 短路、过载和反极性保护
- 额定电压 = 12V
- 最大电流 = 5A
- 最大负载电流=10A
- 输入电压 = 开路电压为 12 至 25V 的太阳能电池板
- 太阳能板功率=50W
太阳能电池板会根据不同的参数产生不同的电压,例如太阳能电池板的日照量、连接负载和温度。该项目由许多步骤组成,涉及大量设计计算。
硬件接线图如下:
随着一天中日照量的变化。因此,太阳能电池板产生的电压将不断变化。由于电压变化,会产生变化的电流。对于任何给定电压,以安培为单位产生的电流量由图表确定称为 IV 曲线,看起来像这样。
在此图中,蓝线表示 30V 的太阳能电池板电压对应约 6.2A 的电流。绿线表示 35V 的电压对应 5A 的电流。
我们知道,
功率 =电压*电流
在上图中,有一点电压乘以相应的电流将产生最大功率。我们项目中使用的太阳能电池板定义了以下参数,如下图所示。
电路的工作原理及注意事项
对于一个50W的太阳能电池板和一个12V的铅酸电池负载,我们需要设计一个降压转换器。我们案例中的降压转换器是使用电感、电容和MOSFET设计的。开关频率与大小成反比电感器和电容器,并与 MOSFET 中的开关损耗成正比。
考虑到这些限制,选择的频率是 50KHz。为了达到这个频率,我们使用了 33uH 的电感器和 220uF 的电容器。对于 MOSFET 部分,我们使用了 IRFZ44N MOSFET,因为它很容易获得。值有足够的余量和低Rds(On) 值。为了驱动 MOSFET,我们需要一个 MOSFET 驱动器 IC。IR2104 半桥驱动器最适合这种应用。高侧和低侧 MOSFET 的两个输出。
太阳能电池板电压作为输入电压馈入。降压转换器由同步 MOSFET 开关 Q4 和 Q5 以及储能器件电感器 L1 和电容器 C4 和 C9 组成。电感器平滑开关电流,并与 C4 一起,它平滑输出电压 电容C3和电阻R4是缓冲网络,用于减少电感中开关电流产生的电感电压振铃。
添加 MOSFET Q3 以允许系统阻止电池电量在夜间流回太阳能电池板。当 Q4 从通过 D2 的电压打开时,Q3 打开。R3 消耗 Q3 栅极的电压,因此当它关闭时Q4 关闭。
IC IR2104是半桥MOSFET栅极驱动器。它使用来自Arduino Pin D6的PWM信号驱动高边和低边MOSFET。IR2104也可以通过Arduino的D5 Pin在pin上的控制信号关闭3. D4 和 C6 是自举电路的一部分,为 Q3 和 Q4 生成高端栅极驱动电压。软件会跟踪 PWM 占空比,不允许 100% 或始终开启。它将 PWM 占空比限制在 99.9 % 以保持电荷泵工作。
有两个分压器电路(R1、R2 和 R7、R8)分别测量太阳能电池板和电池电压。分压器的输出将电压信号馈送到 Arduino 的模拟引脚 A0 和 A2。
二极管 D3 应该使转换器更高效。二极管 D1 和 D5 是 TVS 二极管,用于太阳能电池板和负载侧的过压保护。MOSFET Q2 用于控制负载。2N2222 晶体管 Q1 和电阻器 R5,以及R6。
电流传感器ACS712感应来自太阳能电池板的电流并将其馈送到Arduino模拟引脚A1。3个LED连接到微控制器的数字引脚并作为输出接口显示充电状态。控制背光灯LCD 显示屏。如果用户按下开关,它将打开 15 秒,然后再次关闭。
硬件组装
在我们的项目中,我使用了24V的太阳能电池板。太阳能电池板很大,可以收集大量的光。太阳能电池板连接在组装电路的输入端子。电池端子。负载可以输出所需的电压。负载可以直接连接到逆变器或一些电池供电的设备。要为 Arduino Nano 板和电路的其他部分供电,可以使用 5V-9V 直流适配器。
5、驱动代码实现
驱动代码将使用到如下驱动库:
代码具有测量太阳能电池板电压、电流、功率、电池电压、充电器状态、SOC、PWM占空比、负载状态的所有参数和功能。20×4 LCD 显示屏会显示该参数的实时状态。
#include "TimerOne.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define ENABLE_DATALOGGER 0
#define LOAD_ALGORITHM 0
#define SOL_AMPS_CHAN 1
#define SOL_VOLTS_CHAN 0
#define BAT_VOLTS_CHAN 2
#define AVG_NUM 8
#define SOL_AMPS_SCALE 0.026393581
#define SOL_VOLTS_SCALE 0.029296875
#define BAT_VOLTS_SCALE 0.029296875
#define PWM_PIN 6
#define PWM_ENABLE_PIN 5
#define PWM_FULL 1023
#define PWM_MAX 100
#define PWM_MIN 60
#define PWM_START 90
#define PWM_INC 1
#define TRUE 1
#define FALSE 0
#define ON TRUE
#define OFF FALSE
#define TURN_ON_MOSFETS digitalWrite(PWM_ENABLE_PIN, HIGH)
#define TURN_OFF_MOSFETS digitalWrite(PWM_ENABLE_PIN, LOW)
#define ONE_SECOND 50000
#define LOW_SOL_WATTS 5.00
#define MIN_SOL_WATTS 1.00
#define MIN_BAT_VOLTS 11.00
#define MAX_BAT_VOLTS 14.10
#define BATT_FLOAT 13.60
#define HIGH_BAT_VOLTS 13.00
#define LVD 11.5
#define OFF_NUM 9
#define LED_YELLOW 12
#define LED_GREEN 11
#define LED_RED 10
#define LOAD_PIN 4
#define BACK_LIGHT_PIN 3
byte battery_icons[6][8] =
{{
0b01110,
0b11011,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b11111,
},
{
0b01110,
0b11011,
0b10001,
0b10001,
0b10001,
0b10001,
0b11111,
0b11111,
},
{
0b01110,
0b11011,
0b10001,
0b10001,
0b10001,
0b11111,
0b11111,
0b11111,
},
{
0b01110,
0b11011,
0b10001,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
},
{
0b01110,
0b11011,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
},
{
0b01110,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
}
};
#define SOLAR_ICON 6
byte solar_icon[8] =
{
0b11111,
0b10101,
0b11111,
0b10101,
0b11111,
0b10101,
0b11111,
0b00000
};
#define PWM_ICON 7
byte _PWM_icon[8] =
{
0b11101,
0b10101,
0b10101,
0b10101,
0b10101,
0b10101,
0b10101,
0b10111,
};
byte backslash_char[8] =
{
0b10000,
0b10000,
0b01000,
0b01000,
0b00100,
0b00100,
0b00010,
0b00010,
};
float sol_amps;
float sol_volts;
float bat_volts;
float sol_watts;
float old_sol_watts = 0;
unsigned int seconds = 0;
unsigned int prev_seconds = 0;
unsigned int interrupt_counter = 0;
unsigned long time = 0;
int delta = PWM_INC;
int pwm = 0;
int back_light_pin_State = 0;
boolean load_status = false;
enum charger_mode {off, on, bulk, bat_float} charger_state;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
pinMode(PWM_ENABLE_PIN, OUTPUT);
TURN_OFF_MOSFETS;
charger_state = off;
lcd.init();
lcd.backlight();
for (int batchar = 0; batchar < 6; ++batchar)
{
lcd.createChar(batchar, battery_icons[batchar]);
}
lcd.createChar(PWM_ICON, _PWM_icon);
lcd.createChar(SOLAR_ICON, solar_icon);
lcd.createChar('\\', backslash_char);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
Timer1.initialize(20);
Timer1.pwm(PWM_PIN, 0);
Timer1.attachInterrupt(callback);
Serial.begin(9600);
pwm = PWM_START;
pinMode(BACK_LIGHT_PIN, INPUT);
pinMode(LOAD_PIN, OUTPUT);
digitalWrite(LOAD_PIN, LOW);
digitalWrite(BACK_LIGHT_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print("SOL");
lcd.setCursor(4, 0);
lcd.write(SOLAR_ICON);
lcd.setCursor(8, 0);
lcd.print("BAT");
}
void loop()
{
read_data();
run_charger();
print_data();
load_control();
led_output();
lcd_display();
}
int read_adc(int channel)
{
int sum = 0;
int temp;
int i;
for (i = 0; i < AVG_NUM; i++)
{
temp = analogRead(channel);
sum += temp;
delayMicroseconds(50);
}
return (sum / AVG_NUM);
}
void read_data(void)
{
sol_amps = (read_adc(SOL_AMPS_CHAN) * SOL_AMPS_SCALE - 13.51);
sol_volts = read_adc(SOL_VOLTS_CHAN) * SOL_VOLTS_SCALE;
bat_volts = read_adc(BAT_VOLTS_CHAN) * BAT_VOLTS_SCALE;
sol_watts = sol_amps * sol_volts ;
}
void callback()
{
if (interrupt_counter++ > ONE_SECOND)
{
interrupt_counter = 0;
seconds++;
}
}
void set_pwm_duty(void)
{
if (pwm > PWM_MAX) {
pwm = PWM_MAX;
}
else if (pwm < PWM_MIN) {
pwm = PWM_MIN;
}
if (pwm < PWM_MAX) {
Timer1.pwm(PWM_PIN, (PWM_FULL * (long)pwm / 100), 20);
}
else if (pwm == PWM_MAX) {
Timer1.pwm(PWM_PIN, (PWM_FULL - 1), 20);
}
}
void run_charger(void)
{
static int off_count = OFF_NUM;
switch (charger_state)
{
case on:
if (sol_watts < MIN_SOL_WATTS)
{
charger_state = off;
off_count = OFF_NUM;
TURN_OFF_MOSFETS;
}
else if (bat_volts > (BATT_FLOAT - 0.1))
{
charger_state = bat_float;
}
else if (sol_watts < LOW_SOL_WATTS) {
pwm = PWM_MAX;
set_pwm_duty();
}
else {
pwm = ((bat_volts * 10) / (sol_volts / 10)) + 5;
charger_state = bulk;
}
break;
case bulk:
if (sol_watts < MIN_SOL_WATTS)
{
charger_state = off;
off_count = OFF_NUM;
TURN_OFF_MOSFETS;
}
else if (bat_volts > BATT_FLOAT)
{
charger_state = bat_float;
}
else if (sol_watts < LOW_SOL_WATTS)
{
charger_state = on;
TURN_ON_MOSFETS;
}
else {
if (old_sol_watts >= sol_watts)
{
delta = -delta;
}
pwm += delta;
old_sol_watts = sol_watts;
set_pwm_duty();
}
break;
case bat_float:
if (sol_watts < MIN_SOL_WATTS)
{
charger_state = off;
off_count = OFF_NUM;
TURN_OFF_MOSFETS;
set_pwm_duty();
}
else if (bat_volts > BATT_FLOAT)
{
TURN_OFF_MOSFETS;
pwm = PWM_MAX;
set_pwm_duty();
}
else if (bat_volts < BATT_FLOAT)
{
pwm = PWM_MAX;
set_pwm_duty();
TURN_ON_MOSFETS;
if (bat_volts < (BATT_FLOAT - 0.1))
{
charger_state = bulk;
}
}
break;
case off:
TURN_OFF_MOSFETS;
if (off_count > 0)
{
off_count--;
}
else if ((bat_volts > BATT_FLOAT) && (sol_volts > bat_volts)) {
charger_state = bat_float;
TURN_ON_MOSFETS;
}
else if ((bat_volts > MIN_BAT_VOLTS) && (bat_volts < BATT_FLOAT) && (sol_volts > bat_volts)) {
charger_state = bulk;
TURN_ON_MOSFETS;
}
break;
default:
TURN_OFF_MOSFETS;
break;
}
}
void load_control()
{
#if LOAD_ALGORITHM == 0
load_on(sol_watts < MIN_SOL_WATTS && bat_volts > LVD);
#else
load_on(sol_watts > MIN_SOL_WATTS && bat_volts > BATT_FLOAT);
#endif
}
void load_on(boolean new_status)
{
if (load_status != new_status)
{
load_status = new_status;
digitalWrite(LOAD_PIN, new_status ? HIGH : LOW);
}
}
void print_data(void)
{
Serial.print(seconds, DEC);
Serial.print(" ");
Serial.print("Charging = ");
if (charger_state == on) Serial.print("on ");
else if (charger_state == off) Serial.print("off ");
else if (charger_state == bulk) Serial.print("bulk ");
else if (charger_state == bat_float) Serial.print("float");
Serial.print(" ");
Serial.print("pwm = ");
if (charger_state == off)
Serial.print(0, DEC);
else
Serial.print(pwm, DEC);
Serial.print(" ");
Serial.print("Current (panel) = ");
Serial.print(sol_amps);
Serial.print(" ");
Serial.print("Voltage (panel) = ");
Serial.print(sol_volts);
Serial.print(" ");
Serial.print("Power (panel) = ");
Serial.print(sol_volts);
Serial.print(" ");
Serial.print("Battery Voltage = ");
Serial.print(bat_volts);
Serial.print(" ");
Serial.print("\n\r");
}
void light_led(char pin)
{
static char last_lit;
if (last_lit == pin)
return;
if (last_lit != 0)
digitalWrite(last_lit, LOW);
digitalWrite(pin, HIGH);
last_lit = pin;
}
void led_output(void)
{
static char last_lit;
if (bat_volts > 14.1 )
light_led(LED_YELLOW);
else if (bat_volts > 11.9)
light_led(LED_GREEN);
else
light_led(LED_RED);
}
void lcd_display()
{
static bool current_backlight_state = -1;
back_light_pin_State = digitalRead(BACK_LIGHT_PIN);
if (current_backlight_state != back_light_pin_State) {
current_backlight_state = back_light_pin_State;
if (back_light_pin_State == HIGH)
lcd.backlight();
else
lcd.noBacklight();
}
if (back_light_pin_State == HIGH)
{
time = millis();
}
lcd.setCursor(0, 1);
lcd.print(sol_volts);
lcd.print("V ");
lcd.setCursor(0, 2);
lcd.print(sol_amps);
lcd.print("A");
lcd.setCursor(0, 3);
lcd.print(sol_watts);
lcd.print("W ");
lcd.setCursor(8, 1);
lcd.print(bat_volts);
lcd.setCursor(8, 2);
if (charger_state == on)
lcd.print("on ");
else if (charger_state == off)
lcd.print("off ");
else if (charger_state == bulk)
lcd.print("bulk ");
else if (charger_state == bat_float)
{
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print("float");
}
int pct = 100.0 * (bat_volts - 11.3) / (12.7 - 11.3);
if (pct < 0)
pct = 0;
else if (pct > 100)
pct = 100;
lcd.setCursor(12, 0);
lcd.print((char)(pct * 5 / 100));
lcd.setCursor(8, 3);
pct = pct - (pct % 10);
lcd.print(pct);
lcd.print("% ");
lcd.setCursor(15, 0);
lcd.print("PWM");
lcd.setCursor(19, 0);
lcd.write(PWM_ICON);
lcd.setCursor(15, 1);
lcd.print(" ");
lcd.setCursor(15, 1);
if ( charger_state == off)
lcd.print(0);
else
lcd.print(pwm);
lcd.print("% ");
lcd.setCursor(15, 2);
lcd.print("Load");
lcd.setCursor(15, 3);
if (load_status)
{
lcd.print("On ");
}
else
{
lcd.print("Off ");
}
spinner();
backLight_timer();
}
void backLight_timer()
{
if ((millis() - time) <= 15000)
lcd.backlight();
else
lcd.noBacklight();
}
void spinner(void)
{
static int cspinner;
static char spinner_chars[] = { '*', '*', '*', ' ', ' '};
cspinner++;
lcd.print(spinner_chars[cspinner % sizeof(spinner_chars)]);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543