sexta-feira, 7 de junho de 2013

PIColino - Development Board para PIC

Mais um projeto que estou encabeçando, apresento-lhes em primeira mão o Picolino! Dá até para ter idéia né?!

Muitos já procuraram por aí uma placa de desenvolvimento com a versatilidade do Arduino, mas, para a família de microcontroladores PIC essa busca nunca é satisfatória por diversos fatores, dentre eles cito o custo e design. Talvez o que mais chegue perto é o ChipKit. Mas não vou entrar nesses assuntos agora.

A minha proposta é apresentar para vocês um projeto novo e acredito que vai ajudar bastante muita gente nos trabalhos de conclusão de curso. É o Picolino, uma placa QUASE  compatível com o conhecido Arduino... Mas o core dele é um PIC da famila 18F de 28 pinos.

O Picolino

O hardware do Picolino deverá possuir as seguintes características:
  • Alguma Compatibilidade (pin/pin) com shields Arduino;
  • Clock de 20MHz ou mais (isso garantirá no máximo 5MIPS para as famílias PIC18F ou 1MIPS/MHz em PIC24 e PIC32)
  • Porta Serial RS232 nativo (ainda insisto no RS232, apesar do USB estar começando a aparecer com mais frequencia);
  • Simples de usar, simples de implementar;
  • Compacto: "best fit" na categoria.(aproveita o mesmo layoute do Arduino, só que espelhado)

Por design do microcontrolador, aparecerão as restrições:
  • Ausencia de PWM pins. Terá que ser feito via software!
  • I2C pins e RXTX em localização diferente do arduino
  • Programação via conector próprio (Sem bootloader ainda)
  • 5 portos AD (em vez de 6 no arduino) (mesmo trazendo 6 pinos no conector RA)
  • SPI (MISO/MOSI/SCLK/SS) via software apenas!

Mesmo com algumas restrições que o afastam ainda mais do Arduino, o projeto parece ser promissor. Haja visto que existe uma base de conhecimento imensa usando PIC tais como compiladores, livros didáticos e muitos outros recursos de software.

Ser "best fit" na categoria significa que ele provê o máximo de funcionalidade possível e que pelo menos, num projeto de tamanho razoável (controle de iluminação, temperatura, controles pequenos), pelo menos 50% da sua capacidade seja usada. Isto é, o seu integrado e suas funcionalidades não tenham pinos desperdiçados!

Escolhi a família de microcontroladores PIC18F sendo a placa base, compatível com os seguintes microcontroladores:

PIC18F2520
PIC18F2550
PIC18F2580
PIC18F26K20
CPU clk (max)
40
48
40
64
CPU clk (MIPS)
10
12
10
16
MEM (CODE)
32K
32K
32K
64
MEM (RAM)
1.5K
2K
1.5K
3.5K
MEM (EEPROM)
256
256
256
1K
IO PINS
25
24
25
25
AD converters
10
10
8
10
Timers
4
4
4
4
PWM
2
2
1
1
RS232
Y
Y
Y
Y
I2C
Y
Y
Y
Y
SPI
Y
Y
Y
Y
USB

Y


CAN


Y

LIN
Y
Y
Y
Y


 Ainda tem o PIC18F252 que ficou de fora da comparação. Mas é tirar um e colocar outro no lugar. 

Especial atenção para quem utilizar PIC18F2550: O pino RC3 é perdido pois nesse chip ele é usado para ser referencia de VUSB!

Protótipo

Não costumo perder tempo nos meus projetos. Sempre que começo a pensar, já tenho que implementar algo que possa ser facilmente realizável e entender as suas dificuldades. Então temos abaixo o esquema inicial do protótipo. Parece promissor.

Surpresa!!! Saiba que o picolino tem quase a mesma configuração de pinos de um AVR, só que espelhado...  Isso cria uma nova e interessante solução. conector do Arduino tem que ser colocado no lado da solda. Sendo assim fica pro lado dos componentes o conector dos shields Picolino

Mandei hoje (06/06/2013) a requisição para cotação da manufatura de 6 protótipos... quer ver como ele vai ficar?


Os componentes nessa fase são through hole. Futuras versões virão mais compactos. Usarei SMD.

Agora a surpresa... Saiba que o Picolino tem quase a mesma configuração de pinos de um Arduino, só que espelhado...  Isso cria uma nova e interessante solução: - conector do Arduino tem que ser colocado no lado da solda. Sendo assim fica pro lado dos componentes o conector dos shields Picolino, veja o esquema abaixo:

   .Picolino. Arduino Shield
   .    |   .  
=|-.   =|=  . -|=-|=
[| .   [|   .  |] |
<| .   [|   .  || | 
=|-.   =|=  . -|=-|=
   .    |   .
O desenho não ficou bom..

Ambiente de Programação

Esse é um assunto delicado. Pois desenvolver hardware e software ao mesmo tempo é algo complexo e demanda muito tempo... não tenho equipe comigo nisso. Então vamos fazer assim.

Fica o leitor liberado para usar o que quiser, mas desde que tenha possibilidade de escrever o firmware através do porto ICSP da placa. 

Em paralelo, vou estar trabalhando com uma frente: SDCC. Onde criarei wrappers que facilitem a programação. Em seguida o bootloader. Fica o leitor liberado para usar com toda liberdade. 

--//--

Quando chegar as placas do Picolino, eu atualizo este post...  :)

quinta-feira, 23 de maio de 2013

Driver de Motor: L298 + Arduino (Parte 3 - Final)

Não adianta em nada fazer um hardware, passar horas a fio roteando cada trilha do circuito para não ter com que usar. Os microcontroladores trouxeram para o mundo uma flexibilidade enorme para o projeto de hardware... então mãos na massa

Especificações

O firmware deverá ser capaz de fazer o controle total do hardware:
- acionar as respectivas saídas: direção, acionamento e velocidade
- ler as entradas de controle (Rsensing)

Não colocarei portabilidade no rol de requisitos. É para Arduino, pronto e acabou. Se quiser portar para PIC, 8051 ou outra plataforma... é um outro projeto.

Para facilitar o instanciamento, já que o compilador core do Arduino suporta suporta, é uma classe (isso mesmo C++!!!) chamado L298Driver. Junto dele vai um exemplo do sketch para ser feito no Arduino.

Implementação

Para reduzir a complexidade desse post, o código fonte está disponível no site do Google Code, sob o projeto l298-arduino-driver: https://code.google.com/p/l298-arduino-driver

Instalação e Teste

É necessário que se tenha o Arduino. Procure identificar onde o Arduino está instalado. Vamos chamar esse diretório de ; dentro dele existem diversos diretórios. O importante é o libraries.

Baixe o projeto do GoogleCode, https://code.google.com/p/l298-arduino-driver/source/browse/ o arquivo L298Driver.zip

""Unzipe"" o arquivo para dentro da pasta libraries dentro do diretório de instalação do Arduino IDE , como na figura abaixo: 


Uma vez feito. Abra o Arduino IDE (ele irá reconfigurar os diretórios para reconhecer a nova biblioteca).

Antes de codificar, indique para utilizar a biblioteca: Menu>Sketch>Import Library>L298Driver, a IDE irá adicionar o cabeçalho #include .. veja abaixo

E por fim um programa funcional!


É compilar, gravar no Arduino, empilhar o Shield e se divertir!

Até breve!

quarta-feira, 22 de maio de 2013

Driver de Motor: L298 + Arduino (Parte 2)


Continuação do artigo anterior (parte 1)
Esta é a parte do artigo que explicará as funcionalidades e modo de operação do nosso driver. O artigo anterior, lidados com as bases do hardware. Na 3a e última parte, descreveremos a biblioteca para Arduino.

Funcionamento

O funcionamento é extremamente simples. Aplicando as tensões nas entradas de controle conforme o diagrama abaixo, temos a ativação, ou não, da saída.

Entrada
Saída
A(C)
EN1(2)
B(D)
OUT
X
0
X
0
0
1
0
0
0
1
1
RUN +
1
1
0
RUN -
1
1
1
0

X - não importa o valor da entrada.
0, 1: sinal low (0V) e high (Vcc) respectivamente
RUN: saída ativada (+ em uma polaridade, - com polaridade invertida)

No diagrama abaixo, temos um exemplo de conexão com a utilização do Arduino. A conexão SENS1,SENS2 é opcional.



A alimentação do motor não deverá ultrapassar 46V. Nem o consumo total dos motores, excederem 2A cada um – Não há fusível de proteção.
Quando a alimentação do motor estiver ativada, o LED7 ficará aceso. Os demais LEDs estão ligados às linhas de sinal do L298.

PWM

Até o presente momento não se falou em controle de velocidade. Do jeito que está, o motor irá girar na sua velocidade nominal, proporcional à corrente que passa, claro! E se quisermos dotar os motores de um controle de velocidade? Como não temos potenciômetros para controlar corrente, então lançamos mão do PWM.

O PWM significa Pulse Width Modulation, ou modulação por largura de pulso. Quando se trabalha com PWM, o leitor tem que ter em mente o conceito de ciclo de trabalho (duty cycle). Um sinal de PWM tem freqüência fixa, e valores de amplitudes bem definidos – 0 ou 1 (0 ou VCC, como quiser) – mudando somente quanto tempo no ciclo o sinal vai estar em 0 ou 1. Isto é, eu altero somente a largura do pulso... Veja  no diagrama abaixo 5 sinais  de mesma freqüência, porém com largura de pulso diferentes.



Na prática, dado as características elétricas da carga mediante um sinal variável, a largura de pulso irá influenciar dramaticamente no comportamento do dispositivo:
  1.   A tensão efetiva (eficaz ou RMS) será proporcional à largura do pulso. Apesar da corrente agora, ser também pulsada, esse conceito não se aplica. Se o motor consome 2A, ele receberá os 2A, só que por um período de tempo determinado pelo PWM. Isso faz com que se tenha melhor controle de consumo e por sua vez a potência consumida J
  2. Sinais PWM costumam gerar harmônicos: Prepare-se para instabilidades com ruídos e ajustes nos capacitores que vão aos motores L
  3. O corte abrupto (1 --> 0) nos sinais PWM faz com que as cargas indutivas criem correntes parasitas (fly back). Os diodos de proteção irão trabalhar mais intensamente! Fica de olho, costumam esquentar!!! K  

Plugue os pinos EN1 e EN2 nas portas do Arduino que suportem PWM. Quando ativar o pino, em vez de usar a função digitalWrite, use analogWrite passando o numero do pino e o valor de PWM desejado (0 a 255, para 0 e 100% respectivamente)
No diagrama de conexão acima, os pinos EN estão ligados aos pinos 6 e 9 que são PWM! :) 


Current Sensing

Por fim, e não menos importante, current sensing, isto é os pinos SENS1 e SENS2. É dele que virá o controle de feedback do driver.

Se estiver utilizando o current sensing propriamente, isto é com o resistor de 0.5Ohm/1W. Teremos ali a leitura de tensão proporcional à corrente que passa por cada canal do L298. Conforme especificado, se essa tensão ultrapassar 1V, teremos uma corrente circulante &gt; 2A, o que pode queimar o integrado...

Os pinos SENS1 e SENS2 deverão ser ligados a um conversor AD, o arduino possui esses pinos (A0..A5). Para ler, utilize analogRead(). Faça as conversões necessárias. O AD do arduino tem resolução de 10bits... com fundo de escala de 5V... então fazendo os cálculos, qualquer leitura acima de 204 (~=1V) já podemos tomar algumas ações como, diminuir o ciclo de PWM; ou desabilitar o canal respectivo momentaneamente; ou parar tudo para proteger o L298.

No diagrama acima, eles estão ligados aos pinos A0 e A1 respectivamente.

--//--

No proximo e último artigo, trataremos da biblioteca de controle para o Arduino.

terça-feira, 21 de maio de 2013

Driver de Motor: L298 + Arduino (Parte 1)


Vamos fazer o Arduino andar? É comum o Arduino ser utilizado em projetos de robótica, ora lendo sensores e dando um feedback e/ou movimentando algum chassis com motores.

Fazer estas coisas não é um mistério, mas em muitos casos conseguir no mercado nacional aquele shield que faça essa interface é uma aventura e muitas vezes o preço não é convidativo.

O driver aqui descrito é baseado num manjadíssimo circuito integrado dedicado para motores o L298; Vários fabricantes produzem esse integrado, mas é mais comum vê-lo sob a sigla da ST (SGS-Thompson). Esse integrado é conhecido como "Ponte H" - H-Bridge - Dual. Isto é, ele tem 2 bridges, o que pode fazê-lo controlar 2 motores com um componente só! O que é muito bom!

Quer saber um pouco mais sobre pontes-H? Visite o artigo neste blog: http://mmc-zaap.blogspot.com/2013/05/ponte-h.html

O L298

O L298 implementa a ponte-H conforme o diagrama abaixo:

Não se assuste com as portas AND fazendo o driver dos transistores. A função dele é criar a lógica necessária de forma que NUNCA coloque os transistores de saída em curto e fazer a interface entre o setor de baixa tensão e alta tensão.  Já que o L298 trabalha com 2 alimentações.

São 2 canais(A, B); Eis a Pinagem e função:
Pino
Função
Descrição
IN1
E
Entrada de comando canal A
IN2
E
Entrada de comando Canal A
OUT1
S
Saída de carga canal A
OUT2
S
Saída de carga canal A
EN1
E
Habilita canal A
SENS1
S
Saída para o sensor de corrente do canal A(R)
IN3
E
Entrada de comando canal B
IN4
E
Entrada de comando Canal B
OUT3
S
Saída de carga canal B
OUT4
S
Saída de carga canal B
EN2
E
Habilita canal B
SENS2
S
Saída para o sensor de corrente do canal B(R)
VS
PWR
Alimentação do conjunto de potencia dos canais
VCC/+Vss
PWR
Alimentação da lógica
GND
PWR
Ground

Não vou entrar nos detalhes das características elétricas, mas resumirei o que for importante para a implementação desse projeto:
- Alimentação da lógica: 4,5V a 7V.
- Alimentação do conjunto de poténcia: 7 a 46V - com limitação de corrente circulante de até 2A por canal!!! (não se iluda com os 4A que diz no datasheet, isso é corrente TOTAL=A+B)
- Frequencia de comutação máxima aplicada nos pinos IN e EN : 40Khz (caso use alguma entrada com PWM)

O Sensor de corrente nada mais é que um resistor cuja derivação serve para monitorar a tensão gerada. Um microcontrolador ou algum outro circuito dedicado tem que ler essa saída e fazer o corte do fornecimento de tensão para a carga de forma que o circuito se mantenha estável e dentro dos parâmetros de funcionamento.

O datasheet não é claro, mas há o entendimento que deverá ser um resistor cuja finalidade é gerar uma tensão proporcional à corrente circulante em cada um dos canais. O corte será feito se a corrente atingir 2A.

Segundo o datasheet, a tensão gerada em SENS1, SENS2 não deverá exceder 2V. Se fixarmos em 1V, teremos que para 2A, a resistencia deverá ser de 0.5Ohm. Portanto um Resistor de 0.5Ohmx1W tá de bom tamanho. Pede-se que seja um resistor puro, não de fio. Pois num processo de comutação, esses resistores (de fio) podem dar problemas devido indutância intrínseca do componente. 


O circuito

Com base no datasheet do L298, o circuito final é bastante simples:

Para auxiliar a depuração e funcionamento do motor, foi colocado uma bateria de LED's na parte de controle do circuito, justamente para visualizar o sinal de cada estágio.

Os diodos D1 a D8 são diodos para proteção. Se o circuito não for crítico, pode usar o 1N4007. Mas recomendo algum tipo de diodo schottky para potência: 1N5819, UF4007 por exemplo. Não utilize o circuito sem os diodos de proteção. D9 é só uma proteção adicional contra inversão de polaridade.

C1,C2 são capacitores de desacoplamento de fonte. Valores não críticos: 10uF para o Eletrolítico, 100nF para o despolarizado (Cerâmica ou poliéster - tanto faz). C3,C4 são de poliéster - 10nF ou 47nF. para desacoplamento/ruído do motor.

Especial atenção para RS1 e RS2. Estes resistores deverão ser de 0.5Ohm/1Watt. De preferência que não seja de fio! Caso o driver trabalhe com motores de pequena potência (desses de brinquedos) O resistor pode ser substituído por um jumper. Os demais resistores (R1 a R6) 1k2; R9 é calculado em função da tensão de alimentação 4k7 tá de bom tamanho)

O conector J1 é do tipo KK. Ele não é conectado diretamente a algum pino do Arduino por uma questão de projeto. No futuro pretendo liberar mais outros 2 artigos, usando um controlador dedicado para este driver de potência: Usando o SN74HC14 ou SN74HC00 (ou qualquer porta inversora) e outro dedicado ao seu controlador original, o L297. Esses 2 últimos projetos, sim, conectados diretamente à porta do Arduino. X1,X2,X3 são conectores tipo MTA de 0.156” (distância entre pinos) com trava.

Realização

Abaixo temos o layout do circuito impresso. Em breve disponibilizarei o projeto na em um repositório público e o leitor poderá baixar e reproduzir a placa.


Veja como ficou...


Veja o vídeo do carro robótico em funcionamento, logo abaixo:



É isso aí! Até a próxima!

segunda-feira, 20 de maio de 2013

Ponte H

Por estes dias recebi um daqueles projetinhos de colégio... mais para ajudar que fazer. Mas acabei fazendo.Para não deixar a prática ficar sem a teoria. Resolvi descrever um pouco de um artifício usado em circuitos de potência. As configurações de pontes H são as mais diversas.  Mas o conceito se aplica a todos.

Uma ponte H, nada mais é um circuito eletrônico que permite comutar a tensão na carga. Isto é, com base em uma lógica de comando, a corrente pode fluir num sentido, ora em outro. Em outras palavras: inversão de polaridade. ;)
No esquema abaixo, temos o circuito típico de uma ponte H. Como eu disse, existem várias formas de projetar uma. Usei o modelo NPN/PNP pois é mais fácil de entender o que acontece, e se o usuário quiser implementar, é mais seguro. Veja o esquema abaixo:

O funcionamento é simples. Basta aplicar alguma tensão nos pontos indicados (reverse/forward inputs). Para facilitar o entendimento, seja "0" a ligação ao terra (ou negativo) e "1" ao positivo.

Pelo visto os fluxos que importam e surtem efeitos são os "0"-"1" e "1"-"0" . Nos demais nem flui corrente... então não há ativação do motor.

Esse é o princípio do funcionamento da Ponte H. Na verdade esse circuito é bastante útil quando precisa de alguma forma tirar vantagem da inversão da polarização. Motores DC é um caso muito comum.

Veja que os transistores em muitos casos conduzem direto sem resistência limitadora nos seus coletores ou emissores, somente a resistência da carga é que vai limitar alguma coisa... por isso fique antenado, transistorzinho barato-chinfrim de sinal ou baixa corrente aqui não tem vez! Se usar, vai queimar!


Diodos de Proteção

Entre coletores e emissores de cada transistor, devemos ter um diodo de proteção para o caso de comutarmos cargas indutivas. Motivo? Óbvio... Pela lei de Lenz, Lorenz e... blá blá blá, uma carga indutiva quando tem o seu fornecimento de corrente cessado, o campo magnético criado e circundante é capaz de gerar uma tensão em oposição... blá,blá,blá!

Os diodos de proteção são para isso, caso o motor gere uma tensão em resposta ao corte de energia ou troca de polarização, o diodo irá drenar essa carga nociva ao terra (ou ao potencial de alimentação, se for o caso). Os diodos NÃO deverão ser 1N4148, BAT54 ou qualquer outro de sinal ou baixa corrente. PODE usar o 1N4007, mas o melhor mesmo é usar um do tipo schottky 1N5819 ou UF4007 - fast recovery diodes.

Abaixo o exemplo de uso desses diodos:

Circuito

Com base no circuito acima, implementei um pequeno shield para Arduino. Veja o layoute abaixo. Quem tiver interesse nesse circuito, entre em contato. Quando eu tiver um repositório on-line atualizarei o este post.

No shield temos os principais pontos: J1, J2 e J3. J1 é a conexão com o motor. J2 é a entrada de alimentação - CUIDADO! Este porto NÃO TEM proteção. Se inverter a polaridade da alimentação aqui, os diodos de proteção irão queimar! J3 é o ponto de conexão de controle, onde o Arduino irá comandar o funcionamento do circuito.

O valor dos resistores não tem mistério: coloca 1K para todo mundo!

ATENÇÂO: Não convém usar VIN e +5V do arduino para alimentar este circuito. Utilize uma fonte em separado.
Vista dos componentes
Lado da Solda

É isso aí! Guarde este artigo. Em breve irei voltar a esse mesmo assunto numa outra abordagem!

domingo, 17 de janeiro de 2010

Quando o cartucho de tinta acaba, o que sobra?

Diferente dos assuntos eletrônicos, este é mais especializado e traz ao leitor uma curiosidade estonteante. Quando o cartucho de tinta acaba, o que sobra? O resultado da minha pequena curiosidade traz uma luz a certeza cruel de que realmente as empresas que fabricam impressoras ganham dinheiro mesmo é com os insumos: Venda de cartucho e papéis.

O Jato de Tinta

O funcionamento do jato de tinta é simples. O princípio dele é parecido com um acelerador de partículas. O cabeçote da impressora, energiza-se de forma a puxar um pouco de tinta (alguns microlitros ou milésimos de mililitros), e assim quando essa gotícula é eletrizada, a polaridade do cabeçote muda, expelindo a gota em direção ao papel. Outros modelos podem usar o princípio da dilatação para que a gota seja expelida.. em fim independente da tecnologia, no linguaguar comum o cabeçote dá uma "cuspidinha" no papel.

A contagem

P:Como é que o cartucho sabe que a tinta está acabando?
R: Ele não sabe! Ele estima, é um cálculo assim: um cartucho tem 8ml (mililitros) e a "cuspidinha" consome 2mcl (microlitros) então o cartucho consegue, durante a sua vida útil, suprir 8ml/2mcl=8000mcl/2mcl=4000 cuspidinhas. Então um chip inserido no cartucho conta essas cuspidinhas. Lembre-se é uma estimativa! Esse cálculo tem lá suas tolerâncias que pode pender para mais ou para menos.. não sei qual a tolerância.

A verdade NUA e CRUA!

Tenho uma impressora jato de tinta EPSON C65, hoje troquei os cartuchos coloridos dele, são 3: Magenta, Ciano e Amarelo. Cada caixinha de 8ml cada. Com os cartuchos antigos eu não sei o que fazer, jogo fora ou recarrego ou sei lá, ligo para EPSON para ver se existe um canal de recolhimento. Nessa onda de eco-politicamente correto, não vou poluir rios e contaminar solos com o  conteúdo desses cartuchos. Enfim...

Tomei a curiosidade de abrir um cartucho usado. Sempre fui curioso nisso. E para a minha supresa, havia tinta. Abri com cuidado, para não fazer lambança na pia do banheiro. Peguei uma seringa e comecei cuidadosamente a sugar o líquido. De 8ml originais de caixa, sobrou-me 4,3ml ainda no cartucho. E a impressora se negava a imprimir com o referido cartucho (por isso eu troquei).

Não existe conexão entre o chip e qualquer elemento interno do cartucho de forma a indicar o real nível. Portanto, são 4.3ml jogados fora.

Detalhes do cartucho

Inicialmente vou dar um close no chip do cartucho. É interessante notar que não tem nada demais. Só é um chip que só está ali no cartucho por estar. A função dele é armazenar o contador e algumas informações de identificação do cartucho



 A vista do cartucho é simples, primeira foto o verso com a pinta preta que recobre a pastilha do chip. A outra face é a face que a impressora se comunica. 7 Pinos, onde somente 5 são utilizados. Não sei nada sobre essa interface... quando eu descobrir eu posto aqui.

Nessa imagem vemos o cartucho aberto e a forma que ele é por dentro.



A imagem à direia é a pelicula protetora interna do cartucho se fores abrir um, abra com cuidado, pois ele é parte da retenção da tinta no cartucho. Corte com um estilete afiado. O plástico é macio. À esquerda, temos a visão interna de um cartucho e os repositórios da tinta. Já limpo pela seringa.

Agora a visão do horror financeiro. A seringa com a tinta que restou e o cartucho acusou que não havia mais tinta (contador de cuspidinha zerado).



A seringa é de 5ml, limpei 4.3ml, o cartucho era de 8ml. Joguei um pouco mais de 50% dos R$32,00 (por cartucho)  na lixeira!

Pense nisso! :)

Solução?

Dizem que existem programas que resetam ou desbloqueiam o cartucho. Mas nesse caso, usei o cartucho até ele realmente não colocar mais tinta no papel. Portanto eu tenho lá minhas dúvidas...

Estudando a geometria do cartucho e de como a tinta chega ao reservatório final (o redondinho) penso em dar umas batidinhas e deixar repousando em alguma posição que propicie a migração da tinta até lá e subsequentemente aplicar um desse programas para resetar o contador desses cartuchos.

Procure na internet (google: "Resetting EPSON cartridges") você irá encontrar programas que dispensam hardware especiais.

Custo da recarga?

Não existe garantias de que a tinta usada nos quiosques de recarga sejam as mesmas utilizadas pelos fabricantes. Dependendo do quiosque, existe até a picaretagem de adicionar água à tinta - para render mais! Eu encaro impressora como se fosse um carro, prefiro pagar caro para não ter defeito. Apesar de que, numa impressora colorida, 2 trocas do conjunto todo de cartuchos (usando somente originais) já paga o custo de uma impressora nova.

Portanto, ao meu ver, uma boa recarga tem que ser avaliada. Lembre-se da idoneidade do recarregador. Pelo que eu vejo, os quiosques cobram em média R$20,00 para recarregar este tipo de cartucho... contra 32,00 de um original (sendo que são jogados 16,00 fora).

Vou ponderar isso... Até mais!